¿Ejecutar múltiples comandos con 1 línea en la línea de comandos de Windows?

65

¿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?

T. Stone
fuente

Respuestas:

105

Sí hay. Es &.

&& ejecutará el comando 2 cuando el comando 1 esté completo siempre que no haya fallado.

& se ejecutará independientemente

Phoshi
fuente
77
&y &&solo funciona en Windows ' cmd.exe, que no es DOS.
Grawity
22
'DOS' como término se usa a menudo para describir cmd, y dado que la operación usa svn, dudo mucho que siga usando DOS. No es necesario ser pedante :)
Phoshi el
Allí: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Utiliza Windows XP. Ciertamente no DOS (nunca se vio tan bien;))
Phoshi
8
Creo que es seguro asumir que cuando alguien menciona "DOS", realmente significa "Símbolo del sistema de Windows". Voy a arriesgarme aquí y decir que la mayoría de las personas probablemente no usan DOS en estos días. Gracias por la corrección, es un poco innecesario hoy en día.
Murdoch Ripper el
@MurdochRipper ¿Qué quieres decir? Estoy viendo esta pregunta en DOS en este momento. ;)
Andrew
4

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.

Torben Gundtofte-Bruun
fuente
4

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:

start "" netsh dump && pause

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 &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

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 el echocomando. Alternativamente, puede crear el archivo por lotes temporal con un editor de texto, como el Bloc de notas.

Luego, use startpara iniciar el archivo por lotes:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


Nota: El par vacío de comillas dobles es para el "Title"que se mostrará en la barra de título de la ventana de comandos que startse abrirá. Este "Title"argumento es técnicamente un argumento opcional para start, pero en realidad es obligatorio , si el comando que startse ejecutará está entre comillas dobles. Por ejemplo, en el segundo ejemplo:

start "" "temporary foobar.cmd"

si omite el par vacío de comillas dobles como este:

start "temporary foobar.cmd"

luego startse abrirá una nueva ventana de comandos y se usará "temporary foobar.cmd"como la nueva ventana de comandos "Title", y nada se ejecutará en la nueva ventana de comandos)

Si desea startesperar a que se complete el archivo por lotes (después de que pausese descarta), antes de que se startcomplete, debe agregar el /winterruptor al startcomando:

start "" /w foobar.cmd

Puede poner todo esto junto en una línea e incluso eliminar (eliminar) el archivo por lotes temporal ( foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

Tenga en cuenta que si va a eliminar el archivo por lotes temporal, debe ejecutarlo startcon el /winterruptor; de lo contrario, el archivo por lotes temporal probablemente se eliminará antes de que pueda ejecutarse.

Kevin Fegan
fuente
En lugar de /wuno, podría dormir un poco antes de eliminar el archivo. timeout 2lo hará, por ejemplo.
Antonio
@ kevin-fegan ¿por qué necesitas un archivo cmd temporal?
maxxyme
0

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
O podría decir(if exist abc. command₁) & command₂
Scott, el
@Scott Sé que los cumplidos son un pecado en estos sitios, pero 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.
John Kens
1
Agradezco los cumplidos / felicitaciones, pero no entiendo lo que estás diciendo. user138334 dijo: "En caso de que desee ajustar el primer comando con un ifpero todavía desea que el segundo comando se ejecute independientemente, entonces también debe ajustar el ifcon un cmd /c", y respondí con una forma de hacerlo sin él cmd /c. Entonces, ¿por qué dice que la única forma de vincular la mayoría de las declaraciones por lotes es mediante el uso cmd /c? ¿Y por qué te lanzas starta la mezcla?
Scott
0

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 comando

Ver aquí

KIRBY INHALES U
fuente
Y también &, &&y ||no son realmente un comando, es parte del lote. No es un comando
KIRBY INHALES U
Y %command%puede ejecutar esa cadena como un comando, visto aquí
KIRBY INHALES U
-1

Descubrí que el uso de 'INICIAR' solucionó el funcionamiento de varios comandos (estoy ejecutando Windows 10 Home). Por ejemplo:

START chrome.exe "page.web.com" & timeout 20
bazzakay
fuente
Las respuestas no deben contener comentarios, como "Gracias por esto", distrae de su solución. Debería considerar editar esta respuesta, por lo que simplemente responde la pregunta, con tanto detalle como sea, pero sin el ruido (es decir, el comando que no funciona)
Ramhound
¡Lo que está buscando es &no start!
NetwOrchestration
¿Qué problema resuelve esto? ¿Qué sucede cuando escribes la línea de comando sin start?
Scott
-2

hacer un archivo por lotes con un nombre corto, es decir, bat.bat .

add cmd /c %1 
    cmd /c %2 
rem

y así sucesivamente a 9 líneas y guardar

luego úsalo con comillas dobles

bat "command one" "command two" "command three" 

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.

mover
fuente