¿Cómo puedo dividir comandos largos en varias líneas en un archivo por lotes?
batch-file
Ondra Žižka
fuente
fuente
^
y después del texto del comando.echo
edita.co^␍py ^␍file1 ^␍file2
. Le sugiero que elimine su comentario para evitar confusiones, especialmente porque esta pregunta es tan popularLa regla para el caret es:
Un cursor 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 máxima de línea de ~ 8192 caracteres (Windows XP, Windows Vista y Windows 7).
Para suprimir el escape del siguiente personaje, puede usar una redirección.
La redirección tiene que ser justo antes del cursor. Pero existe una curiosidad con la redirección antes del caret.
Si coloca una ficha en el cursor, se elimina la ficha.
Y también es posible insertar avances de línea en la cadena:
La línea vacía es importante para el éxito. Esto funciona solo con expansión retrasada, de lo contrario, el resto de la línea se ignora después del avance de línea.
Funciona porque el cursor al final de la línea ignora el siguiente avance de línea y escapa al siguiente carácter, incluso si el siguiente carácter también es un avance de línea (los retornos de carro siempre se ignoran en esta fase).
fuente
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
no funciona! He tenido que añadir un espacio:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.(Esto es básicamente una reescritura de la respuesta de Wayne, pero con la confusión alrededor del cursor despejado. Así que lo publiqué como CW. No me da miedo editar las respuestas, pero reescribirlas por completo parece inapropiado).
Puede dividir 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 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 para incluir también el espacio (ya sea antes^
o al comienzo de la siguiente línea; esa última opción puede ayudar a aclarar que es una continuación).Ejemplos: (todos probados en Windows XP y Windows 7)
Se puede escribir como:
o
o incluso
(Eso último funciona porque no hay espacios entre el
xc
y el^
, y no hay espacios al comienzo de la siguiente línea. Entonces, cuando eliminas el^
y la nueva línea, obtienes ...xcopy
).Para facilitar la lectura y la cordura, probablemente sea mejor dividir 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 .fuente
Se pueden poner múltiples comandos entre paréntesis y distribuirlos en numerosas líneas; así que algo así
echo hi && echo hello
se puede poner así:También las variables pueden ayudar:
También noté con carets (
^
) que a losif
condicionales les gustaba que siguieran solo si había un espacio presente:fuente
cmd1.bat && cmd2.bat
es diferente de la forma parens: ejecutarcmd2.bat
iff secmd1.bat
ejecutó con éxito (-sin configuración%errorcode%
). La última forma se ejecuta incondicionalmente. Algo inesperado (al menos para mí) es que, obviamente, no puede usar la combinación de ambos +, es decir, agregar&&
antes del salto de línea.( echo <line break here> hello )
da como resultado una línea vacía.Sin embargo, parece que dividir en el medio de los valores de un bucle for no necesita un intercalado (e intentar usar uno se considerará un error de sintaxis). Por ejemplo,
Tenga en cuenta que ni siquiera se necesita espacio después de hola o antes de adiós.
fuente
for
sintaxis: los separadores de elementos en "for-set" son espacio, coma, punto y coma, signo igual, carácter TAB y líneas nuevas.do
parte contieneif-else
declaraciones múltiples / anidadas ?