Toplu iş dosyası - Batch file
| Dosya adı uzantıları |
.bat, .cmd,.btm
|
|---|---|
| İnternet medya türü | |
| Biçim türü | komut dosyası |
| için konteyner | Kodlar |
Bir toplu iş dosyası bir olan komut dosyası içinde DOS , OS / 2 ve Microsoft Windows . Düz metin dosyasında saklanan komut satırı yorumlayıcısı tarafından yürütülecek bir dizi komuttan oluşur . Bir toplu iş dosyası, yorumlayıcının etkileşimli olarak kabul ettiği herhangi bir komutu içerebilir ve toplu iş dosyası içinde koşullu dallanmayı ve döngü oluşturmayı sağlayan , , ve etiketler gibi yapıları kullanabilir . "Toplu iş" terimi, toplu işlemden gelir, yani "etkileşimli olmayan yürütme" anlamına gelir, ancak bir toplu iş dosyası birden çok veriden oluşan bir toplu işlemi işlemeyebilir .
IFFORGOTO
İş Kontrol Dili (JCL), DCL ve anabilgisayar ve mini bilgisayar sistemlerindeki diğer sistemlere benzer şekilde , toplu iş dosyaları, kullanıcının bunları otomatikleştirmek için bir komut dosyası oluşturmasına izin vererek belirli normal görevler için gereken işi kolaylaştırmak için eklendi. Bir toplu iş dosyası çalıştırıldığında, kabuk programı (genellikle COMMAND.COM veya cmd.exe ) dosyayı okur ve komutlarını normalde satır satır yürütür. Unix benzeri işletim sistemleri gibi, Linux , bir adlandırılan dosyanın benzer, ancak daha esnek, tip kabuk komut dosyası .
Dosya adı uzantısı .bat DOS ve Windows kullanılmaktadır. Windows NT ve OS/2 ayrıca .cmd ekledi . Diğer ortamlar için Toplu dosyaları örneğin farklı uzantılar, olabilir .btm içinde 4DOS , 4OS2 ve 4NT ilgili kabukları.
Toplu iş dosyalarının ayrıntılı işlenmesi sürümler arasında önemli ölçüde değişti. Bu makaledeki ayrıntıların bir kısmı tüm toplu iş dosyaları için geçerliyken, diğer ayrıntılar yalnızca belirli sürümler için geçerlidir.
Varyantlar
DOS
DOS'ta, bir toplu iş dosyası , adını ve ardından gerekli herhangi bir parametreyi yazıp tuşuna basarak komut satırı arabiriminden başlatılabilir ↵ Enter. DOS yüklendiğinde, mevcut olduğunda AUTOEXEC.BAT dosyası otomatik olarak yürütülür, bu nedenle DOS ortamını kurmak için çalıştırılması gereken tüm komutlar bu dosyaya yerleştirilebilir. Bilgisayar kullanıcıları AUTOEXEC.BAT dosyasına sistem tarih ve saatini ayarlayabilir, DOS ortamını başlatabilir, yerleşik programları veya aygıt sürücülerini yükleyebilir veya ağ bağlantılarını ve atamalarını başlatabilir.
Bir .bat dosya adı uzantısı, komut yorumlayıcı COMMAND.COM tarafından satır satır yürütülen komutları içeren bir dosyayı , temel programlama işlevi için bazı ekstra toplu iş dosyasına özgü komutlarla birlikte, elle girilen komutların bir listesiymiş gibi tanımlar. GOTOsatır yürütme akışını değiştirmek için bir komut dahil .
Erken Pencereler
Microsoft Windows , 1985 yılında metin tabanlı işletim sistemlerinde grafik kullanıcı arabirimi tabanlı (GUI) bir kaplama olarak tanıtıldı ve DOS üzerinde çalışacak şekilde tasarlandı. Başlatmak için, AUTOEXEC.BAT dosyasının sonuna eklenebilen ve Windows'un otomatik olarak yüklenmesine izin veren komut kullanıldı . Önceki sürümlerde, MS-DOS İsteminde Windows'tan bir .bat türü dosya çalıştırılabilirdi. Windows 3.1x ve önceki sürümlerinin yanı sıra Windows 9x , toplu iş dosyalarını çalıştırmak için COMMAND.COM'u çağırdı.
WIN
OS/2
IBM OS / 2 işletim sistemi DOS tarzı toplu dosyaları destekledi. Ayrıca , daha gelişmiş bir toplu dosya betik dili olan REXX'in bir sürümünü de içeriyordu . IBM ve Microsoft bu sistemi geliştirmeye başladı, ancak yapımı sırasında bir anlaşmazlıktan sonra dağıldı; bunun sonucunda IBM, Microsoft'tan bahsetmeden DOS benzeri konsol kabuğuna atıfta bulundu ve onu sadece DOS olarak adlandırdı, ancak bu görünüşte toplu iş dosyalarının COMMAND.COM'dan çalışma şekli açısından hiçbir fark yaratmadı.
OS/2'nin toplu iş dosyası yorumlayıcısı ayrıca bir EXTPROC komutunu da destekler. Bu, toplu iş dosyasını bir veri dosyası olarak EXTPROC dosyasında belirtilen programa iletir. Adlandırılmış program bir komut dosyası olabilir; bu # ile benzer ! mekanizma.
Windows NT
Windows 98 ve önceki sürümlerinden farklı olarak , Windows NT işletim sistemleri ailesi MS-DOS'a bağlı değildir. Windows NT , .CMD veya .BAT uzantısıyla komut dosyalarını çalıştırabilen gelişmiş bir 32-bit komut yorumlayıcısını ( cmd.exe ) kullanıma sundu . Cmd.exe ek komutlar ekledi ve var olanları biraz farklı bir şekilde uyguladı, böylece aynı toplu iş dosyası (farklı uzantıya sahip) cmd.exe ve COMMAND.COM ile farklı şekilde çalışabilir. Çoğu durumda, desteklenmeyen birkaç komut kullanılmazsa işlem aynıdır. Cmd.exe'nin COMMAND.COM uzantıları, uyumluluk için devre dışı bırakılabilir.
Microsoft, Windows'un eski sürümlerinin kullanıcılarının belirli cmd.exe tarzı toplu iş dosyalarını kullanmasına izin vermek için Windows 9x ve ME için WIN95CMD adlı bir cmd.exe sürümü yayımladı.
Windows 8'den itibaren cmd.exe, toplu iş dosyaları için normal komut yorumlayıcısıdır; eski COMMAND.COM, 16-bit programları çalıştırabilen Windows'un 32-bit sürümlerinde de çalıştırılabilir.
Dosya adı uzantıları
- .bat
- Microsoft tarafından toplu iş dosyaları için kullanılan ilk dosya adı uzantısı . Bu uzantı, iki komut yorumlayıcısının toplu iş dosyalarını yürütmesinin farklı yollarına rağmen, COMMAND.COM veya cmd.exe altında DOS ve tüm Windows sürümleriyle çalışır.
- .cmd
- Windows NT ailesindeki toplu iş dosyaları için kullanılır ve yorumlanması için cmd.exe'ye gönderilir. COMMAND.COM bu dosya adı uzantısını tanımıyor, bu nedenle cmd.exe komut dosyaları yanlışlıkla yanlış Windows ortamında yürütülmez. Ek olarak
append,dpath,ftype,set,path,assocvepromptkomutları, bir .bat dosyasından yürütüldüğünde,errorleveldeğişkenin değerini yalnızca bir hata durumunda değiştirirken, bir .cmd dosyasından, hatasız döndürüldüğünde bile hata düzeyini etkiler. Ayrıca toplu iş dosyaları için IBM'in OS/2 tarafından da kullanılır. - .btm
- 4DOS , 4OS2 , 4NT ve Take Command tarafından kullanılan uzantı . Bu komut dosyaları, özellikle daha uzun olanlarda daha hızlıdır, çünkü komut dosyası satır satır yerine tamamen yürütmeye hazır olarak yüklenir.
Toplu dosya parametreleri
COMMAND.COM ve cmd.exe , toplu işin yoluna ve adına ve toplu işin içinden ilk dokuz çağrı parametresine başvurmak için bir dizi özel değişkeni ( %0, %1aracılığıyla %9) destekler, ayrıca bkz . Var olmayan parametreler sıfır uzunluklu bir dize ile değiştirilir. Ortam değişkenlerine benzer şekilde kullanılabilirler , ancak ortamda depolanmazlar. Microsoft ve IBM, bu değişkenlere ikame parametreleri veya değiştirilebilir parametreler olarak atıfta bulunurken, Digital Research, Novell ve Caldera onlar için ikame değişkenleri terimini oluşturdu . JP Software bunları toplu iş dosyası parametreleri olarak adlandırır .
SHIFT
Örnekler
Bu örnek toplu iş dosyası Hello World!, kullanıcıdan bir tuşa basmasını ister ve bekler ve ardından sonlandırılır. (Not: Değişkenlerle çalışmadıkça komutların küçük veya büyük olması fark etmez)
@ECHO OFF
ECHO Hello World!
PAUSE
Dosyayı yürütmek için, dosya adı uzantısı son eki .bat (veya Windows NT tipi işletim sistemleri için .cmd) ile düz metin biçiminde kaydedilmelidir; bu, genellikle Microsoft Not Defteri gibi bir metin düzenleyici veya Windows'ta çalışan bir kelime işlemci kullanılarak oluşturulur . düz metin modu.
Yürütüldüğünde aşağıdakiler görüntülenir:
Hello World! Press any key to continue . . .
Açıklama
Yorumlayıcı, ilkinden başlayarak her satırı sırayla yürütür. @Herhangi bir satırın başında sembolü yürütülür olarak bu komutu görüntülemesini istemi önler. Komut ECHO OFF, istemi kalıcı olarak veya yeniden açılana kadar kapatır. Birleştirilmiş @ECHO OFFgenellikle burada olduğu gibi bir toplu iş dosyasının ilk satırıdır ve kendisi de dahil olmak üzere herhangi bir komutun görüntülenmesini engeller. Ardından bir sonraki satır yürütülür ve ECHO Hello World!komut çıktısı alınır Hello World!. Sonraki satır yürütülür ve PAUSEkomut Press any key to continue . . ., betiğin yürütülmesini görüntüler ve duraklatır. Bir tuşa basıldıktan sonra komut dosyası sona erer, çünkü başka komut yoktur. Windows'ta, komut dosyası zaten çalışan bir komut istemi penceresinden yürütülürse, pencere, MS-DOS'ta olduğu gibi komut isteminde açık kalır; aksi takdirde pencere sonlandırıldığında kapanır.
Sınırlamalar ve istisnalar
Değişkenlerde boş değerler
Değişken açılımlar komutta metinsel olarak değiştirilir ve bu nedenle hiçbir şey içermeyen değişkenler sözdiziminden basitçe kaybolur ve boşluk içeren değişkenler birden çok simgeye dönüşür. Bu, sözdizimi hatalarına veya hatalara yol açabilir.
Örneğin, %foo% boşsa, bu ifade:
IF %foo%==bar ECHO Equal
hatalı yapı olarak ayrıştırır:
IF ==bar ECHO Equal
Benzer şekilde, %foo%içeriyorsa abc def, farklı bir sözdizimi hatası oluşur:
IF abc def==bar ECHO Equal
Bu sorunu önlemenin genel yolu, boş bir değişken IF ""=="bar"geçersiz yerine geçerli ifadeye genişleyecek şekilde değişken açılımlarını tırnak içine almaktır IF ==bar. Değişkenle karşılaştırılmakta olan metin de tırnak içine alınmalıdır, çünkü tırnak işaretleri özel sınırlayıcı sözdizimi değildir; bu karakterler kendilerini temsil eder.
IF "%foo%"=="bar" ECHO Equal
Gecikmeli !DEĞİŞKEN! Windows 2000 ve sonraki sürümlerde bulunan genişletme, bu sözdizimsel hatalardan kaçınmak için kullanılabilir. Bu durumda, IF komutu ayrıştırıldıktan sonra değer genişletildiğinden, boş veya çok kelimeli değişkenler sözdizimsel olarak başarısız olmaz:
IF !foo!==bar ECHO Equal
Windows 2000 veya sonraki sürümlerdeki diğer bir fark, boş bir değişkenin (tanımsız) değiştirilmemesidir. Önceki örneklerde açıklandığı gibi, önceki toplu yorumlayıcı davranışı boş bir dizeyle sonuçlanabilirdi. Örnek:
C:\>set MyVar=
C:\>echo %MyVar%
%MyVar%
C:\>if "%MyVar%"=="" (echo MyVar is not defined) else (echo MyVar is %MyVar%)
MyVar is %MyVar%
Windows 2000'den önceki toplu yorumlayıcılar sonucu görüntülerdi MyVar is not defined.
Geçirilen dizelerdeki tırnak işaretleri ve boşluklar
Komut satırı bağımsız değişkenlerini kabuk tarafından bir dizi dizeye bölünmüş olarak alan Unix/POSIX işlemlerinin aksine, bir Windows işlemi GetCommandLine API işlevi aracılığıyla tüm komut satırını tek bir dize olarak alır . Sonuç olarak, her Windows uygulaması , tüm komut satırını bağımsız değişkenlere bölmek için kendi ayrıştırıcısını uygulayabilir . Birçok uygulama ve komut satırı aracı, bunu yapmak için kendi sözdizimini geliştirmiştir ve bu nedenle , Windows komut satırlarında meta karakterlerden alıntı yapmak veya meta karakterlerden kaçmak için tek bir kural yoktur .
- Bazı komutlar için, boşluklar, bu boşluklar tırnak içine alınmadıkça, bağımsız değişkenleri ayıran sınırlayıcılar olarak değerlendirilir. Tırnak işaretlerinin uygulamaya nasıl geçirilebileceğine dair çeşitli kurallar vardır:
- Yaygın olarak kullanılan bir kongre tarafından uygulanan Microsoft Visual C ++ çalışma kitaplığa oluşturuldu komut satırı ayrıştırıcı içinde CommandLineToArgvW fonksiyonu. 2 n ters eğik çizgi ve ardından bir tırnak işaretinin (") n ters eğik çizgi ve ardından bir başlangıç/bitiş alıntısı oluşturması, (2 n )+1 ters eğik çizgi ve ardından bir tırnak işaretinin tekrar n ters eğik çizgi ve ardından bir tırnak işareti oluşturması kuralını kullanır. Aynı kural, .NET Framework belirtiminin bir parçasıdır .
- Belgelenmemiş bir yön, alıntılanan bir dizenin ortasında "" ifadesinin tek bir tırnak işareti oluşturmasıdır. (2008'deki [msvcr90] bir CRT değişikliği, bu belgelenmemiş alıntıların işlenmesini değiştirdi.) Bu, | , & ve > . (cmd alışılagelmiş \" ifadesini alıntıdan kaçmak olarak tanımıyor. Alıntıyı görünce, alıntının sona erdiğini düşünerek bu özel anlamları yeniden etkinleştirir.)
- Başka bir kural, tek bir tırnak işaretinin ( " ) dizenin parçası olarak dahil edilmemesidir. Ancak, çıkışlı bir tırnak işareti ( """ ) dizenin bir parçası olabilir.
- Yine bir başka yaygın gelenek , Cygwin'den türetilen taşınmış programların kullanımından gelir . Alıntılardan önce meydana gelen ters eğik çizgiler arasında ayrım yapmaz. Bu alternatif komut satırı ayrıştırıcıları hakkında bilgi için bkz. glob (programlama) § Windows ve DOS .
cmd.exeve gibi bazı önemli Windows komutlarıwscript.exekendi kurallarını kullanır.
- Yaygın olarak kullanılan bir kongre tarafından uygulanan Microsoft Visual C ++ çalışma kitaplığa oluşturuldu komut satırı ayrıştırıcı içinde CommandLineToArgvW fonksiyonu. 2 n ters eğik çizgi ve ardından bir tırnak işaretinin (") n ters eğik çizgi ve ardından bir başlangıç/bitiş alıntısı oluşturması, (2 n )+1 ters eğik çizgi ve ardından bir tırnak işaretinin tekrar n ters eğik çizgi ve ardından bir tırnak işareti oluşturması kuralını kullanır. Aynı kural, .NET Framework belirtiminin bir parçasıdır .
- Diğer komutlar için boşluklar sınırlayıcı olarak değerlendirilmez ve bu nedenle tırnak işaretine ihtiyaç duymaz. Tırnak işaretleri dahil edilirse, dizenin bir parçası olurlar. Bu, echo gibi bazı yerleşik komutlar için geçerlidir .
Bir dize tırnak işaretleri içerdiğinde ve yine tırnak içine alınması gereken başka bir metin satırına eklenecekse, alıntılama mekanizmasına özellikle dikkat edilmelidir:
C:\>set foo="this string is enclosed in quotation marks"
C:\>echo "test 1 %foo%"
"test 1 "this string is enclosed in quotation marks""
C:\>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
ERROR: Invalid Argument/Option - 'string'.
Type "EVENTCREATE /?" for usage.
Windows 2000 ve sonraki sürümlerde çözüm, bir değer içinde bir alıntı karakterinin her oluşumunu üç tırnak karakterinden oluşan bir diziyle değiştirmektir:
C:\>set foo="this string is enclosed in quotes"
C:\>set foo=%foo:"="""%
C:\>echo "test 1 %foo%"
"test 1 """this string is enclosed in quotes""""
C:\>eventcreate /T Warning /ID 1 /L System /SO "Source" /D "Example: %foo%"
SUCCESS: A 'Warning' type event is created in the 'Source' log/source.
Dizelerde kaçan karakterler
Boru ( |) karakterleri gibi bazı karakterlerin komut satırı için özel anlamları vardır. Caret ^ sembolü kullanılarak çıkış yapılmadıkça , ECHO komutu kullanılarak metin olarak yazdırılamazlar :
C:\>Echo foo | bar
'bar' is not recognized as an internal or external command,
operable program or batch file.
C:\>Echo foo ^| bar
foo | bar
Ancak, çıkış karakteri bir ortam değişkenine eklenirken çıkış beklendiği gibi çalışmaz. Değişken, yalnızca yankılandığında canlı bir boru komutu içerir. Karakterin değişkende metin olarak görüntülenmesi için hem düzeltme işaretinin kendisinden hem de çıkış karakterinden kaçmak gerekir:
C:\>set foo=bar | baz
'baz' is not recognized as an internal or external command,
operable program or batch file.
C:\>set foo=bar ^| baz
C:\>echo %foo%
'baz' is not recognized as an internal or external command,
operable program or batch file.
C:\>set foo=bar ^^^| baz
C:\>echo %foo%
bar | baz
Gecikmeli !DEĞİŞKEN! ile mevcut genişleme CMD /V:ONveya SETLOCAL ENABLEDELAYEDEXPANSIONkomut ayrıştırıldı sonra değişken değeri genişletilir çünkü Windows 2000 ve daha sonra ortam değişkenleri saklanan özel karakterleri göstermek için kullanılabilir:
C:\>cmd /V:ON
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\>set foo=bar ^| baz
C:\>echo !foo!
bar | baz
Uyku veya komut dosyası gecikmesi
TIMEOUT komutu Windows Vista ile kullanıma sunulana kadar, zamanlanmış bir duraklama uygulamanın kolay bir yolu yoktu, çünkü PAUSE komutu komut dosyası etkinliğini herhangi bir tuşa basılana kadar süresiz olarak durdurur.
Birçok geçici çözüm mümkündü, ancak genellikle yalnızca bazı ortamlarda işe yaradı: CHOICEKomut daha eski DOS sürümlerinde mevcut değildi PING, yalnızca TCP/IP kuruluysa kullanılabilirdi vb. Microsoft'tan herhangi bir çözüm mevcut değildi, ancak diğer kaynaklardan bir dizi küçük yardımcı program yüklenebilirdi. Ticari bir örnek , 1 saniye bekleyecek olan 1988 Norton Utilities Batch Enhancer (BE) komutu BE DELAY 18veya WAIT 55 saniye bekleyip sonra kontrolü komut dosyasına döndüren ücretsiz 94 baytlık WAIT.COM olabilir . Bu tür programların çoğu 16 bit .COM dosyalarıdır, bu nedenle 64 bit Windows ile uyumlu değildir.
Soyulmuş CR/LF ile metin çıktısı
Normalde, yazdırılan tüm metinlerde otomatik olarak her satırın sonuna satır başı (CR) ve satır besleme (LF) için kontrol karakterleri eklenir.
- toplu test.bat
@echo foo @echo bar
C:\>batchtest.bat foo bar
İki yankı komutunun aynı komut satırını paylaşması önemli değildir; çıktıyı ayrı satırlara bölmek için CR/LF kodları eklenir:
C:\>@echo Message 1&@echo Message 2
Message 1
Message 2
Windows 2000 ve sonraki sürümlerde keşfedilen bir hile, metni takip eden CR/LF olmadan metin çıktısı almak için özel komut istemini kullanmaktır. Bu örnekte, CR/LF Mesaj 1'i takip etmez, ancak Satır 2 ve Satır 3'ü takip eder.
- partitest2.bat
@echo off set /p ="Message 1"<nul echo Message 2 echo Message 3
C:\>batchtest2.bat Message 1Message 2 Message 3
Bu, sonuna CR/LF eklenmemiş bir metin dosyasına veri çıkışı yapmak için kullanılabilir:
C:\>set /p ="Message 1"<nul >data.txt
C:\>set /p ="Message 2"<nul >>data.txt
C:\>set /p ="Message 3"<nul >>data.txt
C:\>type data.txt
Message 1Message 2Message 3
Ancak, bu soyulmuş CR/LF istemi çıktısını doğrudan bir ortam değişkenine enjekte etmenin bir yolu yoktur.
Bir kısayoldan Tekdüzen Adlandırma Kuralı (UNC) çalışma dizini ayarlama
Geçerli çalışma dizini olarak bir UNC yolu kullanan bir komut istemine sahip olmak mümkün değildir ; Örneğin\\server\share\directory\
Komut istemi, bir çalışma dizini atamak için sürücü harflerinin kullanılmasını gerektirir; bu, bir sunucu UNC paylaşımında depolanan karmaşık toplu iş dosyalarının çalıştırılmasını daha zor hale getirir. Bir toplu iş dosyası bir UNC dosya yolundan çalıştırılabilirken, çalışma dizini varsayılanı C:\Windows\System32\.
Windows 2000 ve sonraki sürümlerde, PUSHDve POPDkomutunu komut uzantılarıyla kullanmak bir geçici çözümdür.
Varsayılan olarak etkinleştirilmezse /E:ON, komut yorumlayıcı anahtarı kullanılarak komut uzantıları geçici olarak etkinleştirilebilir .
Bu nedenle, bir UNC paylaşımında bir toplu iş dosyası çalıştırmak, UNC paylaşımına geçici bir sürücü harfi atamak ve toplu iş dosyasının çalışma dizini olarak UNC paylaşımını kullanmak için, şuna benzeyen bir Windows kısayolu oluşturulabilir:
- Hedef:
%COMSPEC% /E:ON /C "PUSHD """\\SERVER\SHARE\DIR1\DIR2\""" & BATCHFILE.BAT & POPD"
Bu kısayolun çalışma dizini özelliği yok sayılır.
Bu aynı zamanda Windows Vista ve daha yeni sürümlerde Kullanıcı Hesabı Denetimi (UAC) ile ilgili bir sorunu da çözer . Bir yönetici oturum açtığında ve UAC etkinleştirildiğinde ve sağ tıklama dosya bağlam menüsünü kullanarak bir ağ sürücüsü harfinden bir toplu iş dosyasını yönetici olarak çalıştırmaya çalıştıklarında, işlem beklenmedik bir şekilde başarısız olur. Bunun nedeni, yükseltilmiş UAC ayrıcalıklı hesap bağlamının ağ sürücüsü harfi atamalarına sahip olmaması ve yükseltilmiş bağlam için Explorer kabuğu veya oturum açma komut dosyaları aracılığıyla sürücü harfleri atamanın mümkün olmamasıdır. Ancak, yukarıdaki PUSHD/ POPDyapıyı kullanarak toplu iş dosyasına bir kısayol oluşturarak ve toplu iş dosyasını yönetici olarak çalıştırmak için kısayolu kullanarak, geçici sürücü harfi yükseltilmiş hesap bağlamında oluşturulacak ve kaldırılacak ve toplu iş dosyası doğru şekilde çalışacaktır. .
Aşağıdaki sözdizimi, geçerli toplu komut dosyasının yoluna doğru şekilde genişliyor.
%~dp0
UNC varsayılan yolları, eski programları çökertmek için kullanıldıkları için varsayılan olarak kapalıdır.
DWORD kayıt defteri değeri DisableUNCCheckde HKEY_CURRENT_USER\Software\Microsoft\Command Processorvarsayılan dizin UNC olmasını sağlar. CDkomutu değiştirmeyi reddedecek, ancak bir UNC yolunu Cmd kısayoluna veya Başlat komutunu kullanarak Varsayılan Dizine yerleştirecektir. ( paylaşım yöneticiler içindir).
start "" /d \\127.0.0.1\C$ "cmd /k"C$
Karakter seti
Toplu iş dosyaları, bilgisayar tarafından tanımlandığı gibi bir OEM karakter seti kullanır, örn. Kod sayfası 437 . Bunların ASCII olmayan kısımları, aksi takdirde Windows'ta kullanılan Unicode veya Windows karakter kümeleriyle uyumlu değildir, bu nedenle dikkatli olunması gerekir. İngilizce olmayan dosya adları, yalnızca bir DOS karakter seti uyumlu düzenleyici aracılığıyla girildiğinde çalışır. Bu kümenin dışındaki karakterlere sahip dosya adları toplu iş dosyalarında çalışmaz.
gibi bir dahili komuttan dosya borularına Unicode'da çıktı almak diriçin cmd /Ukomutu kullanabilirsiniz . Örneğin cmd /U /C dir > files.txt, UTF-16 LE kodlamasında doğru Windows karakterleriyle bir dizin listesi içeren bir dosya oluşturur .
Toplu virüsler ve kötü amaçlı yazılımlar
Diğer programlama dillerinde olduğu gibi toplu iş dosyaları kötü niyetli olarak kullanılabilir. Basit truva atları ve çatal bombalar kolayca oluşturulur ve toplu iş dosyaları , hosts dosyasını değiştirerek bir tür DNS zehirlenmesi yapabilir . Toplu virüsler mümkündür ve ayrıca Windows'un Otomatik Çalıştırma özelliğini kullanarak USB flash sürücüler aracılığıyla da yayılabilirler .
Bir toplu iş dosyasındaki aşağıdaki komut, önce onay istemeden geçerli dizindeki (klasördeki) tüm verileri siler:
del /Q *.*
Bu üç komut, mevcut sistem kaynaklarını tüketmek, sistemi yavaşlatmak veya çökertmek için sürekli olarak kendini kopyalayacak basit bir çatal bombadır :
:TOP
start "" %0
goto TOP
Diğer Windows komut dosyası dilleri
.cmd dosyalarını yorumlayan cmd.exe komut işlemcisi, en az Windows 10'a kadar tüm 32 ve 64 bit Windows sürümlerinde desteklenir. .BAT dosyalarını yorumlayan COMMAND.EXE, tüm 16 ve 32-bit sürümlerinde desteklenir. en az Windows 10'a kadar bit sürümleri.
Windows için kullanılabilecek başka, daha sonraki ve daha güçlü komut dosyası dilleri vardır. Ancak bunlar, kullanılmadan önce komut dosyası dili yorumlayıcısının yüklenmesini gerektirir:
- KiXtart ( .kix ) — 1991 yılında bir Microsoft çalışanı tarafından, özellikle bir .cmd dosyasının basit 'hissini' korurken bir ağ oturum açma komut dosyasında yararlı olan komutlara olan ihtiyacı karşılamak için geliştirilmiştir.
- Windows Komut Dosyası Ana Bilgisayarı ( .vbs , .js ve .wsf ) — Microsoft tarafından 1998'de yayımlanan ve cscript.exe ve wscript.exe'den oluşur, VBScript veya JScript ile yazılmış komut dosyalarını çalıştırır . Bunları pencereli modda (wscript.exe ana bilgisayarıyla) veya konsol tabanlı modda (cscript.exe ana bilgisayarıyla) çalıştırabilir. Windows 98'den beri Windows'un bir parçası oldular .
- PowerShell ( .ps1 ) — Microsoft tarafından 2006 yılında piyasaya sürüldü ve Windows XP (SP2/SP3) ve sonraki sürümlerle çalışabilir . PowerShell, hem etkileşimli olarak (komut satırı arabiriminden) hem de kaydedilmiş komut dosyaları aracılığıyla çalışabilir ve Unix kabuklarına çok benzer .
- Unix tarzı kabuk komut dosyası dilleri, Cygwin gibi bir Unix uyumluluk aracı kuruluysa kullanılabilir.
- Perl , Python , Ruby , Rexx , Node.js ve PHP gibi platformlar arası komut dosyası oluşturma araçları Windows için kullanılabilir.
Uzantısız dosya adı girilirse komut dosyaları çalışır. Varsayalım , , , , vb. DoThisvarsa DoThis.com, yorumlanmasını yöneten öncelik kuralları vardır; varsayılan olarak en yüksek önceliğe sahiptir. Bu varsayılan sıra, kullanıcı tarafından ayarlanabilen PATHEXT ortam değişkeni tarafından daha yeni işletim sistemlerinde değiştirilebilir .
DoThis.exeDoThis.batDoThis.cmdDoThis.com
Ayrıca bakınız
Notlar
Referanslar
Dış bağlantılar
- Microsoft Windows XP Toplu Dosya başvurusu
- Windows toplu iş dosyaları nasıl çalışır?
- Windows 10 toplu iş dosyası komutları
- FreeDOS' FreeCOM: tam özellik listesi
- Windows Komut Satırı Arayüzü komut dosyası programlama bağlantıları
- komut dosyası oluşturma ile ilgili bilgiler (ayrıca komut satırı)
-
dbenham. "Windows Komut Yorumlayıcısı (CMD.EXE) komut dosyalarını nasıl ayrıştırır?". Yığın Taşması . Eksik veya boş
|url=( yardım )