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 %1a foo bar. (Nota che c'è un carattere spaziale tra fooe 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^ barnon produrrà foo bar.
Quindi, non c'è modo di ottenere l'output foo bare il più vicino che possiamo ottenere è in esecuzione test.bat foo" "barche produce foo" "baro in esecuzione test.bat "foo bar"che produce "foo bar".
Ora, la ragione per le altre risposte sembrano al lavoro è perché cdfa il proprio analisi supplementari, divergendo dal comportamento di solito argomento che passa (il solito %1, %2, %3ed 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 cdavesse 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 cdsolo (e alcune altre funzioni). Non ha nulla a che fare con il solito passaggio di argomenti.
Anzi, cdha 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" "baro:
test.bat "foo bar"
che produce "foo bar"o:
test.bat "foo "bar
che produce "foo "baro:
test.bat foo" bar"
che produce foo" bar"o:
test.bat "foo b"ar
che produce "foo b"aro:
test.bat fo"o bar"
che produce fo"o bar"o:
test.bat fo"o ba"r
che produce fo"o ba"ro:
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 bardopo aver tagliato i "caratteri. cdL'autore deve aver capito anche questo ... se dovessimo dedurre dal cdcomportamento 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