Apesar das respostas darem a ilusão de que funciona, o fato é que você não pode infiltrar espaços em argumentos comuns. Isso é fácil de provar:
-
Salve " echo %1 " como test.bat . Este arquivo em lote gerará o primeiro argumento que o cmd nos passa.
-
Agora, experimente e execute test.bat , definindo o valor de %1 para foo bar . (Observe que há um caractere de espaço entre foo e bar .)
-
Teste e erro por alguns anos e perceba que não há como fazer isso . As pessoas vão sugerir a fuga usando ^ , mas test.bat foo^ bar não produzirá foo bar .
Portanto, não é possível obter a saída foo bar , e o mais próximo que podemos obter é executar test.bat foo" "bar , que produz foo" "bar ou executar test.bat "foo bar" , que produz "foo bar" .
Agora, a razão pela qual as outras respostas aparecem para o trabalho é porque cd faz sua própria análise adicional, divergindo do comportamento da passagem usual de argumentos (a usual %1 , %2 , %3 e etc em arquivos em lote típicos).
Por exemplo, considere o comando peculiar:
cd c:\documents and settings \some folder with spaces
Por que isso funciona? Isto é devido a cd propriamente dito fazendo algo equivalente a juntar os 7 usuais argumentos em um argumento lógico. De acordo com o argumento cmd, passando as normas, vemos 7 argumentos:
-
c:\documents
-
and
-
settings
-
\some
-
folder
-
with
-
spaces
É como se cd tivesse juntado todos os 7 argumentos em um argumento lógico, fazendo algo parecido com array.join(" ") , que produz o caminho:
c:\documents and settings \some folder with spaces
Observe que esse comportamento é peculiar a cd only (e algumas outras funções). Não tem nada a ver com a discussão usual.
De fato, cd tem outra peculiaridade. Lembre-se de que afirmamos acima que não conseguimos obter a saída foo bar ? A saída mais próxima que podemos 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 mesmo:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
que produz """"f"""o""""o"" ""ba"""r"""""""""" .
Todos os exemplos acima têm uma semelhança, que é produzir foo bar depois de compensarmos os caracteres " . O autor de cd deve ter percebido isso também ... se inferirmos do comportamento peculiar de cd que apaga todos os " que ele recebe , permitindo que todos esses comandos trabalho:
-
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