¿Cómo puedo ejecutar múltiples comandos en la línea de comandos de Windows con una sola línea?
Entonces, por ejemplo, digamos que quiero realizar una actualización SVN y luego copiar todos los archivos a otra ubicación ...
svn update; copy *.* c:\development\copy\
Eso no funciona obviamente. ¿Hay un carácter o delimitador como ';' para realizar algo como esto?
windows
command-line
T. Stone
fuente
fuente
&
y&&
solo funciona en Windows 'cmd.exe
, que no es DOS.Al menos en MS-DOS 6.22 solía usar la tecla Ctrl+ Tpara obtener una especie de símbolo de párrafo. Esto funcionó como lo &mencionado por Phoshi. Sin embargo, esto solo funcionará si tiene doskey.exe ejecutándose.
fuente
Si desea ejecutar múltiples comandos con 1 línea, donde está comenzando los comandos con
start
, por ejemplo, si desea ejecutar un comando como este:Luego, debe hacerlo en 2 pasos (la solución de una línea se encuentra al final de esta respuesta).
Primero, escriba los comandos en un archivo por lotes temporal (en este caso, puede usar
&
o&&
):Tenga en cuenta que debe "escapar" de cada uno de los
"&"s
(símbolos de unión) con un"^"
para permitir que sean tratados como caracteres ordinarios en elecho
comando. Alternativamente, puede crear el archivo por lotes temporal con un editor de texto, como el Bloc de notas.Luego, use
start
para iniciar el archivo por lotes:Si desea
start
esperar a que se complete el archivo por lotes (después de quepause
se descarta), antes de que sestart
complete, debe agregar el/w
interruptor alstart
comando:Puede poner todo esto junto en una línea e incluso eliminar (eliminar) el archivo por lotes temporal (
foobar.cmd
):Tenga en cuenta que si va a eliminar el archivo por lotes temporal, debe ejecutarlo
start
con el/w
interruptor; de lo contrario, el archivo por lotes temporal probablemente se eliminará antes de que pueda ejecutarse.fuente
/w
uno, podría dormir un poco antes de eliminar el archivo.timeout 2
lo hará, por ejemplo.En caso de que desee ajustar el primer comando con un if pero aún así desea que el segundo comando se ejecute independientemente, entonces debe ajustar el if con un cmd / c así:
cmd / c si existe abc. (rd / q abc) y echo hola
Si no prefijas el if con cmd / c, entonces todo el comando se convierte en parte de if (que es posible que no quieras).
fuente
(if exist abc. command₁) & command₂
start "" cmd /c "(command₁) & (command₂)"
no se responde legítimamente en ninguna parte de la web, pero es la única forma de vincular la mayoría de las declaraciones por lotes. Felicitaciones a usted.if
pero todavía desea que el segundo comando se ejecute independientemente, entonces también debe ajustar elif
con uncmd /c
", y respondí con una forma de hacerlo sin élcmd /c
. Entonces, ¿por qué dice que la única forma de vincular la mayoría de las declaraciones por lotes es mediante el usocmd /c
? ¿Y por qué te lanzasstart
a la mezcla?Sí uso
&
!%command1% & %command2%
ejecuta ambos comandos%command1% && %command2%
ejecuta el primer comando, si eso funcionó ejecuta el segundo comando%command1% || %command2%
ejecuta el primer comando, si eso falla, ejecuta el segundo comandoVer aquí
fuente
&
,&&
y||
no son realmente un comando, es parte del lote. No es un comando%command%
puede ejecutar esa cadena como un comando, visto aquíDescubrí que el uso de 'INICIAR' solucionó el funcionamiento de varios comandos (estoy ejecutando Windows 10 Home). Por ejemplo:
fuente
&
nostart
!start
?hacer un archivo por lotes con un nombre corto, es decir, bat.bat .
y así sucesivamente a 9 líneas y guardar
luego úsalo con comillas dobles
cmd /c
ejecutará cada comando y se cerrará para la siguiente línea sin decir que esto es mejor que && solo que es fácil.fuente