Nonostante le risposte diano l'illusione che funzioni, il fatto è che non puoi intrufolarti negli spazi nei soliti argomenti cmd. Questo è facile da dimostrare:
Salva " echo %1
" come test.bat
. Questo file batch genererà il primo argomento che cmd ci passa.
Ora, prova ad eseguire test.bat
, impostando il valore di %1
a foo bar
. (Nota che c'è un carattere spaziale tra foo
e bar
.)
Prova ed errore per alcuni anni e rendersi conto che non c'è modo di farlo . La gente suggerirà di scappare usando ^
, ma test.bat foo^ bar
non produrrà foo bar
.
Quindi, non c'è modo di ottenere l'output foo bar
e il più vicino che possiamo ottenere è in esecuzione test.bat foo" "bar
che produce foo" "bar
o in esecuzione test.bat "foo bar"
che produce "foo bar"
.
Ora, la ragione per le altre risposte sembrano al lavoro è perché cd
fa il proprio analisi supplementari, divergendo dal comportamento di solito argomento che passa (il solito %1
, %2
, %3
ed ecc in file tipici lotti).
Ad esempio, considera il comando peculiare:
cd c:\documents and settings \some folder with spaces
Perché funziona Ciò è dovuto alla cd
stessa di fare qualcosa di equivalente di unire le 7 soliti argomenti in una sola logica. Secondo l'argomento cmd che passa le norme, vediamo 7 argomenti:
c:\documents
and
settings
\some
folder
with
spaces
È come se cd
avesse unito tutti i 7 argomenti in uno logico, facendo qualcosa di simile array.join(" ")
, che produce il percorso:
c:\documents and settings \some folder with spaces
Si noti che questo comportamento è peculiare cd
solo (e alcune altre funzioni). Non ha nulla a che fare con il solito passaggio di argomenti.
Anzi, cd
ha un'altra peculiarità. Ricordi che abbiamo affermato sopra che non siamo riusciti a ottenere l'output foo bar
? L'output più vicino che possiamo ottenere è eseguendo:
test.bat foo" "bar
che produce foo" "bar
o:
test.bat "foo bar"
che produce "foo bar"
o:
test.bat "foo "bar
che produce "foo "bar
o:
test.bat foo" bar"
che produce foo" bar"
o:
test.bat "foo b"ar
che produce "foo b"ar
o:
test.bat fo"o bar"
che produce fo"o bar"
o:
test.bat fo"o ba"r
che produce fo"o ba"r
o:
test.bat "fo"o" bar"
che produce "fo"o" bar"
o:
test.bat "f""o""o"" ""b""a""r":
che produce "f""o""o"" ""b""a""r"
, o addirittura:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
che produce """"f"""o""""o"" ""ba"""r""""""""""
.
Tutti gli esempi sopra hanno una somiglianza, che è che produrranno foo bar
dopo aver tagliato i "
caratteri. cd
L'autore deve aver capito anche questo ... se dovessimo dedurre dal cd
comportamento peculiare che taglia tutto "
ciò che riceve , permettendo a tutti questi comandi di funzionare:
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