write simple script run how example create commands batch bat batch-file cmd

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