Apesar das respostas darem a ilusão de que funciona, o facto é que não se pode esgueirar em espaços para os habituais argumentos cmd. Isto é fácil de provar:
Guarde “echo %1” como test.bat. Este ficheiro de lote irá produzir o primeiro argumento que o cmd nos passa.
Agora, tente executar test.bat, definindo o valor de %1 para foo bar. (Note que existe um valor de espaço entre foo e bar.)
Tentativa e erro durante alguns anos e percebe que não há forma de o fazer*. As pessoas vão sugerir que se escape usando ^, no entanto test.bat foo^ bar não produzirá foo bar.
Portanto, não há maneira de obter a produção foo bar, e o mais próximo que podemos obter é correr test.bat foo" "bar que produz foo" "bar, ou correr test.bat "foo bar" que produz "foo bar".
Agora, a razão pela qual as outras respostas appear a trabalhar é porque o cd faz ** é próprio**, divergindo do comportamento de passar o argumento habitual (os %1, %2, %3 e etc em ficheiros batch típicos).
Por exemplo, considere o comando peculiar:
cd c:\documents and settings \some folder with spaces
Porque é que funciona? Isto deve-se ao facto de cd seu próprio fazer algo equivalente a juntar os 7 usuais argumentos num único lógico. De acordo com as normas de passagem de argumentos cmd, vemos 7 argumentos:
c:\documents
and
settings
\some
folder
with
spaces
É como se cd tivesse juntado todos os 7 argumentos num único lógico, fazendo algo semelhante a array.join(" "), que produz o caminho:
c:\documents and settings \some folder with spaces
Note-se que este comportamento é peculiar a cd apenas (e algumas outras funções). Não tem nada a ver com a habitual passagem de argumentos.
De facto, cd tem outra peculiaridade. Lembra-se de termos dito acima que não conseguíamos obter o resultado foo bar? A produção mais próxima que conseguimos obter é executando:
test.bat foo" "bar
que produz foo" "bar, ou:
test.bat "foo bar"
que produz "foo bar", ou:
test.bat "foo "bar
que produz "foo "bar, ou:
test.bat foo" bar"
que produz foo" bar", ou:
test.bat "foo b"ar
que produz "foo b"ar, ou:
test.bat fo"o bar"
que produz fo"o bar", ou:
test.bat fo"o ba"r
que produz fo"o ba"r, ou:
test.bat "fo"o" bar"
que produz "fo"o" bar", ou:
test.bat "f""o""o"" ""b""a""r":
que produz "f""o""o"" ""b""a""r", ou ainda:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
que produz """"f"""o""""o"" ""ba"""r"""""""""".
Todos os exemplos acima têm uma semelhança, que é que eles vão produzir foo bar depois de apararmos os " chars. O autor de cd também deve ter percebido isto… se quiséssemos inferir a partir do comportamento peculiar de cd que dispõe todos os " que recebe , permitindo que todos estes comandos funcionem:
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
&007