A pesar de las respuestas que dan la ilusión de que funciona, el hecho es que no puede colarse en los espacios en los argumentos habituales de cmd. Esto es fácil de probar:
Guardar " echo %1
" como test.bat
. Este archivo por lotes generará el primer argumento que cmd nos pasa.
Ahora, intente y ejecute test.bat
, estableciendo el valor de %1
a foo bar
. (Tenga en cuenta que hay un espacio de caracteres entre foo
y bar
.)
Prueba y error durante unos años y date cuenta de que no hay forma de hacerlo . La gente sugerirá escapar usando ^
, pero test.bat foo^ bar
no dará salida foo bar
.
Por lo tanto, no hay forma de obtener la salida foo bar
, y lo más cerca que podemos estar es ejecutar lo test.bat foo" "bar
que produce foo" "bar
, o ejecutar lo test.bat "foo bar"
que produce "foo bar"
.
Ahora, la razón por las otras respuestas aparecen al trabajo se debe a que cd
hace su propio análisis adicional, que diverge del comportamiento del argumento habitual que pasa (la habitual %1
, %2
, %3
y etc en archivos por lotes típicos).
Por ejemplo, considere el comando peculiar:
cd c:\documents and settings \some folder with spaces
Por que funciona Esto se debe a cd
sí mismo haciendo algo equivalente a unirse a los 7 habituales argumentos en un uno lógico. Según el argumento cmd que pasa las normas, vemos 7 argumentos:
c:\documents
and
settings
\some
folder
with
spaces
Es como si cd
hubiera unido todos los 7 argumentos en uno lógico, haciendo algo similar array.join(" ")
, lo que produce el camino:
c:\documents and settings \some folder with spaces
Tenga en cuenta que este comportamiento es peculiar cd
solo (y algunas otras funciones). No tiene nada que ver con pasar argumentos habituales.
De hecho, cd
tiene otra peculiaridad. ¿Recuerdas que dijimos anteriormente que no pudimos obtener la salida foo bar
? La salida más cercana que podemos obtener es ejecutando:
test.bat foo" "bar
que produce foo" "bar
, o:
test.bat "foo bar"
que produce "foo bar"
, o:
test.bat "foo "bar
que produce "foo "bar
, o:
test.bat foo" bar"
que produce foo" bar"
, o:
test.bat "foo b"ar
que produce "foo b"ar
, o:
test.bat fo"o bar"
que produce fo"o bar"
, o:
test.bat fo"o ba"r
que produce fo"o ba"r
, o:
test.bat "fo"o" bar"
que produce "fo"o" bar"
, o:
test.bat "f""o""o"" ""b""a""r":
que produce "f""o""o"" ""b""a""r"
, o incluso:
test.bat """"f"""o""""o"" ""ba"""r"""""""""":
que produce """"f"""o""""o"" ""ba"""r""""""""""
.
Todos los ejemplos anteriores tienen una similitud, que es que producirán foo bar
después de que recortemos los "
caracteres. cd
El autor debe haberse dado cuenta de esto también ... si tuviéramos que inferir del cd
comportamiento peculiar que recorta todo "
lo que recibe , permitiendo que todos estos comandos funcionen:
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