İşe yaradığı yanılsamasını veren cevaplara rağmen, gerçek şu ki uzayda her zamanki cmd argümanlarına gizlice giremezsiniz. Bunu kanıtlamak kolaydır:
" echo %1
" Olarak kaydedin test.bat
. Bu toplu iş dosyası, cmd'nin bizi geçtiği ilk argümanı çıkartacaktır.
Şimdi, denemek ve çalıştırmak test.bat
değerini ayarlayarak, %1
için foo bar
. ( foo
Ve arasında bir boşluk karakteri olduğunu unutmayın bar
.)
Birkaç yıl deneme yanılma ve bunu yapmanın bir yolu olmadığını anlayın . Millet kullanarak kaçmayı önerir ^
, henüz test.bat foo^ bar
çıkış olmaz foo bar
.
Yani çıktıyı elde etmenin yolu yok ve elde edebileceğimiz foo bar
en yakın şey test.bat foo" "bar
üreten üreten foo" "bar
veya test.bat "foo bar"
üreten çalışan "foo bar"
.
Şimdi, diğer cevaplar nedeni görünür işe nedeni cd
yok ise kendi geçirerek zamanki argüman davranışı (her zamanki ayrılarak, ek ayrıştırma %1
, %2
, %3
tipik toplu dosyalarında ve vb.)
Örneğin, kendine özgü komutu düşünün:
cd c:\documents and settings \some folder with spaces
Neden çalışıyor Bunun nedeni cd
kendisinin 7 katılmadan eşdeğer bir şey yapıyor her zamanki bir mantıksal birine argümanlar. Cmd argümanını geçen normlara göre 7 argüman görüyoruz:
c:\documents
and
settings
\some
folder
with
spaces
Sanki cd
7 argümana tek bir mantıksal olana katılmış array.join(" ")
, yoluna benzer bir şey yaparak,:
c:\documents and settings \some folder with spaces
Bu davranışın sadece (ve bazı diğer fonksiyonlara) özgücd
olduğunu unutmayın . Her zamanki argüman geçişi ile ilgisi yoktur.
Aslında, cd
başka bir özelliği var. Yukarıda çıktıyı alamadığımızı söylediğimizi hatırlıyor foo bar
musunuz? Alabileceğimiz en yakın çıktı:
test.bat foo" "bar
hangi üretir foo" "bar
, ya da:
test.bat "foo bar"
hangi üretir "foo bar"
, ya da:
test.bat "foo "bar
hangi üretir "foo "bar
, ya da:
test.bat foo" bar"
hangi üretir foo" bar"
, ya da:
test.bat "foo b"ar
hangi üretir "foo b"ar
, ya da:
test.bat fo"o bar"
hangi üretir fo"o bar"
, ya da:
test.bat fo"o ba"r
hangi üretir fo"o ba"r
, ya da:
test.bat "fo"o" bar"
hangi üretir "fo"o" bar"
, ya da:
test.bat "f""o""o"" ""b""a""r":
hangi üretir "f""o""o"" ""b""a""r"
, hatta:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
hangi üretir """"f"""o""""o"" ""ba"""r""""""""""
.
Yukarıdaki örneklerin tümü, karakterleri foo bar
kestikten sonra üretecekleri benzerliğe sahiptir "
. cd
Yazarın da bunu farketmiş olması gerekir ... eğer aldıkları her şeyi kesen ve bu komutların hepsinin çalışmasına izin veren cd
tuhaf davranışlarından çıkarsaydık :"
cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs