batch-file - simple - script batch file commands
Comandos largos divididos en varias lĂneas en un archivo por lotes de Windows Vista(.bat) (5)
La regla para el caret es:
Una careta al final de la línea, agrega la siguiente línea, se escapará el primer carácter de la línea adjunta.
Puede usar el cursor varias veces, pero la línea completa no debe exceder la longitud de línea máxima de ~ 8192 caracteres (Windows XP, Windows Vista y Windows 7).
echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
Para suprimir el escape del siguiente carácter, puede utilizar una redirección.
La redirección tiene que ser justo antes del caret. Pero existe una curiosidad con la redirección antes del caret.
Si coloca un token en el caret, el token se elimina.
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
Y también es posible incrustar fuentes de línea en la cadena:
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
La línea vacía es importante para el éxito. Esto funciona solo con la expansión demorada; de lo contrario, el resto de la línea se ignorará después del salto de línea.
Funciona, porque el cursor en el extremo de la línea ignora el siguiente salto de línea y escapa del siguiente carácter, incluso si el siguiente carácter también es un salto de línea (los retornos de carro siempre se ignoran en esta fase).
¿Cómo hago que los comandos largos recorran varias líneas en un archivo por lotes de Windows (Vista)?
Se pueden poner varios comandos entre paréntesis y repartirlos en numerosas líneas; Así que algo como echo hi && echo hello
se puede poner así:
( echo hi
echo hello )
También las variables pueden ayudar:
set AFILEPATH="C:/SOME/LONG/PATH/TO/A/FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:/PATH/TO/SETTING...
) else (
...
También noté con caretes ( ^
) que a los condicionales if
les gustaba que siguieran solo si había un espacio presente:
if exist ^
Sin embargo, parece que dividir en medio de los valores de un bucle for no necesita un carácter de intercalación (y tratar de usar uno en realidad se considerará un error de sintaxis). Por ejemplo,
for %n in (hello
bye) do echo %n
Tenga en cuenta que no se necesita espacio después de hola o antes adiós.
(Esto es básicamente una reescritura de la respuesta de Wayne pero con la confusión en torno al caret. Se ha publicado como un CW. No soy tímido para editar las respuestas, pero reescribirlas por completo parece inapropiado).
Puede dividir las líneas largas con el símbolo de intercalación ( ^
), solo recuerde que el símbolo de intercalación y la nueva línea que lo sigue se eliminan por completo del comando, por lo que si lo coloca donde se necesitaría un espacio (como entre los parámetros), Asegúrese de incluir el espacio también (ya sea antes de ^
, o al comienzo de la siguiente línea, esta última opción puede ayudar a aclarar que es una continuación).
Ejemplos: (todos probados en Windows XP y Windows 7)
xcopy file1.txt file2.txt
Se puede escribir como:
xcopy^
file1.txt^
file2.txt
o
xcopy ^
file1.txt ^
file2.txt
o incluso
xc^
opy ^
file1.txt ^
file2.txt
(Lo último funciona porque no hay espacios entre xc
y ^
, y no hay espacios al comienzo de la siguiente línea. Así que cuando eliminas ^
y la nueva línea, obtienes ... xcopy
).
Para facilitar la lectura y la cordura, probablemente sea mejor romper solo entre parámetros (asegúrese de incluir el espacio).
Asegúrese de que ^
no sea lo último en un archivo por lotes, ya que parece haber un problema importante con eso .
Puede dividir las filas largas con el símbolo de interconexión ^
siempre que recuerde que el símbolo de intercalación y la nueva línea que lo sigue se eliminan por completo. Por lo tanto, si debe haber un espacio donde se está rompiendo la línea, incluya un espacio. ( Más sobre eso a continuación. )
Ejemplo:
copy file1.txt file2.txt
se escribiría como:
copy file1.txt^
file2.txt