Незважаючи на відповіді, що дають ілюзію, що це працює, факт полягає в тому, що ви не можете прокрастися в просторах у звичайні аргументи cmd. Це легко довести:
Зберегти як " echo %1" як test.bat. Цей пакетний файл виведе перший аргумент, який передає нам cmd.
Тепер спробуйте і запустити test.bat, встановивши значення %1для foo bar. (Зверніть увагу, що між fooта bar. Є пробіл .)
Пробні помилки протягом декількох років і зрозумійте, що цього немає . Люди запропонують уникнути використання ^, але test.bat foo^ barне вийдуть foo bar.
Таким чином, немає можливості отримати вихід foo bar, і найближче, що ми можемо отримати, це біг, test.bat foo" "barякий виробляє foo" "bar, або запуск, test.bat "foo bar"який виробляє "foo bar".
Тепер, причина , по якій інші відповіді з'являються на роботу, тому що cdробить це власний додатковий синтаксичний, що розходяться від поведінки звичайного передачі аргументу (звичайний %1, %2, %3і т.д. в звичайних пакетних файлів).
Наприклад, розглянемо своєрідну команду:
cd c:\documents and settings \some folder with spaces
Чому це працює? Це пов’язано з cd тим, що роблю щось рівнозначне об'єднанню 7 звичайних аргументів в один логічний. Згідно аргументу cmd, що передає норми, ми бачимо 7 аргументів:
c:\documents
and
settings
\some
folder
with
spaces
Це як би cdз'єднало всі 7 аргументів в один логічний, роблячи щось подібне array.join(" "), що створює шлях:
c:\documents and settings \some folder with spaces
Зауважте, що така поведінка властива cdлише (та деяким іншим функціям). Це не має нічого спільного із звичайним передаванням аргументів.
Дійсно, cdє ще одна особливість. Пам'ятайте, що ми заявляли вище, що не можемо отримати результат foo bar? Найближчий вихід, який ми можемо отримати, це запустивши:
test.bat foo" "bar
яка виробляє foo" "bar, або:
test.bat "foo bar"
яка виробляє "foo bar", або:
test.bat "foo "bar
яка виробляє "foo "bar, або:
test.bat foo" bar"
яка виробляє foo" bar", або:
test.bat "foo b"ar
яка виробляє "foo b"ar, або:
test.bat fo"o bar"
яка виробляє fo"o bar", або:
test.bat fo"o ba"r
яка виробляє fo"o ba"r, або:
test.bat "fo"o" bar"
яка виробляє "fo"o" bar", або:
test.bat "f""o""o"" ""b""a""r":
яка виробляє "f""o""o"" ""b""a""r"або навіть:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
який виробляє """"f"""o""""o"" ""ba"""r"""""""""".
Усі перераховані вище приклади мають одну схожість, яку вони отримають foo barпісля того, як ми обріжемо "символи. cdАвтор автора, мабуть, зрозумів це теж ... якби ми мали зробити висновок cdпро своєрідну поведінку, яка обрізає все "отримане , дозволяючи всім цим командам працювати:
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