Pregunta ¿Cómo ejecuto dos comandos en una línea en Windows CMD?


Quiero ejecutar dos comandos en una consola CMD de Windows.

En Linux, lo haría así

touch thisfile ; ls -lstrh

¿Cómo se hace en Windows?


641
2017-11-08 18:31


origen


Respuestas:


Me gusta esto en todos los sistemas operativos de Microsoft desde 2000, y sigue siendo bueno hoy:

dir & echo foo

Si desea que el segundo comando se ejecute solo si el primero salió exitosamente:

dir && echo foo

La sintaxis de ampersand único (&) para ejecutar múltiples comandos en una línea se remonta a Windows XP, Windows 2000 y algunas versiones anteriores de NT. (4.0 al menos, según un comentarista aquí).

Hay bastantes otros puntos sobre esto que encontrarás desplazándote hacia abajo en esta página.

Los datos históricos siguen, para aquellos que pueden encontrarlo educativo.

Antes de eso, la sintaxis && era solo una característica del reemplazo de shell 4DOS antes de que esa característica se agregara al intérprete de comandos de Microsoft.

En Windows 95, 98 y ME, usaría el carácter de tubería en su lugar:

dir | echo foo

En MS-DOS 5.0 y posterior, a través de algunas versiones anteriores de Windows y NT del intérprete de comandos, el separador de comandos (no documentados) era el carácter 20 (Ctrl + T) que representaré con ^ T aquí.

dir ^T echo foo

841
2017-11-08 18:33



Una cita de la documentación:

Usar comandos múltiples y símbolos de procesamiento condicional

Puede ejecutar múltiples comandos desde una sola línea de comando o script usando símbolos de procesamiento condicional. Cuando ejecuta varios comandos con símbolos de procesamiento condicional, los comandos a la derecha del símbolo de procesamiento condicional actúan en función de los resultados del comando a la izquierda del símbolo de procesamiento condicional.

Por ejemplo, es posible que desee ejecutar un comando solo si falla el comando anterior. O bien, es posible que desee ejecutar un comando solo si el comando anterior es exitoso.

Puede usar los caracteres especiales enumerados en la siguiente tabla para pasar múltiples comandos.

  • & [...]
    command1 & command2
      Use para separar múltiples comandos en una línea de comando. Cmd.exe ejecuta el primer comando y luego el segundo comando.

  • && [...]
    command1 && command2
      Use para ejecutar el comando siguiendo && solo si el comando que precede al símbolo es exitoso. Cmd.exe ejecuta el primer comando y luego ejecuta el segundo comando solo si el primer comando se completó correctamente.

  • || [...]
    command1 || command2
      Use para ejecutar el comando siguiente || solo si el comando anterior || falla Cmd.exe ejecuta el primer comando y luego ejecuta el segundo comando solo si el primer comando no se completó correctamente (recibe un código de error mayor que cero).

  • ( ) [...]
    (command1 & command2)
      Úselo para agrupar o anidar múltiples comandos.

  • ; or ,
    command1 parameter1;parameter2
      Use para separar los parámetros de comando.


490
2017-11-08 18:36



& es el equivalente Bash para ; (ejecutar comandos) y && es el equivalente Bash de && (ejecutar comandos solo cuando el anterior no ha causado un error).


63
2017-11-08 18:37



Puede usar & para ejecutar comandos uno tras otro. Ejemplo: c:\dir & vim myFile.txt


23
2017-11-08 18:34



Si desea crear un acceso directo de cmd (por ejemplo, en su escritorio), agregue el parámetro / k (/ k significa mantener, / c cerrará la ventana):

cmd /k echo hello && cd c:\ && cd Windows

16
2017-11-12 06:39



Puedes usar llamada para superar el problema de las variables de entorno que se evalúan demasiado pronto, p.

set A=Hello & call echo %A%

11
2018-03-13 11:06



cmd /c ipconfig /all & Output.txt

Este comando ejecuta el comando y abre Output.txt archivo en un solo comando


5
2018-04-16 05:41



Entonces, estaba intentando habilitar la tarea específica de ejecutar RegAsm (registrar ensamblaje) desde un menú contextual. El problema que tuve fue que el resultado se dispararía y se iría antes de que pudiera leerlo. Así que traté de conectarme a Pause, que no funciona cuando el comando falla (como se menciona aquí) El comando de pausa no funciona en el script .bat y aquí El comando de archivo por lotes PAUSE no funciona) Así que lo intenté cmd /k pero eso deja la ventana abierta para más comandos (solo quiero leer el resultado). Así que agregué un pause seguido por exit a la cadena, lo que resulta en lo siguiente:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

Esto funciona como un amuleto: RegAsm se ejecuta en el archivo y muestra sus resultados, luego se muestra el mensaje "Presione cualquier tecla para continuar ..." y luego se cierra la ventana del símbolo del sistema cuando se presiona una tecla.

PD Para otros que puedan estar interesados, puede usar las siguientes entradas de archivos .reg para agregar una asociación dllfile a archivos .dll y luego una extensión de comando RegAsm a eso (observe las comillas escaneadas y las barras invertidas):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

Ahora tengo un buen menú contextual para registrar un ensamblaje.


5
2018-01-26 20:35



Un numero de procesamiento de símbolos se puede usar cuando se ejecutan varios comandos en la misma línea, y puede conducir al procesamiento de la redirección en algunos casos, alterando la salida en otro caso o simplemente fallando. Un caso importante es ubicar en la misma línea comandos que manipulan variables.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

Como puede ver en el ejemplo anterior, cuando los comandos que usan variables se colocan en la misma línea, debe usar la expansión diferida para actualizar los valores de sus variables. Si su variable está indexada, use el comando CALL con modificadores %% para actualizar su valor en la misma línea:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

5
2017-08-03 14:31



Para ejecutar dos comandos al mismo tiempo, debe colocar un símbolo & (ampersand) entre los dos comandos. Al igual que:

color 0a & start chrome.exe

¡Aclamaciones!


3
2017-12-13 04:41