it-swarm.dev

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

817
flybywire

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

dir & echo foo

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

dir && echo foo

La sintaxis de signo (y) única para ejecutar varios 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 algunos otros puntos sobre esto que encontrará desplazándose hacia abajo en esta página.

Siguen los datos históricos, para quienes puedan encontrarlo educativo.

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

En Windows 95, 98 y ME, utilizarías el carácter de canalización en su lugar:

dir | echo foo

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

dir ^T echo foo
1005
djdanlib

Una cita de la documentación:

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

Puede ejecutar varios comandos desde una sola línea de comandos o secuencia de comandos utilizando 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 se basan en los resultados del comando a la izquierda del símbolo de procesamiento condicional. 

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

Puede usar los caracteres especiales listados en la siguiente tabla para pasar varios comandos.

  • & [...]
    command1 & command2
    Se utiliza para separar varios comandos en una línea de comandos. Cmd.exe ejecuta el primer comando, y luego el segundo comando.

  • && [...]
    command1 && command2
    Se usa para ejecutar el comando que sigue a && 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 precedente || 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)
    Se usa para agrupar o anidar múltiples comandos.

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

519
Raihan

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

65
manojlds

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

23
scrappedcola

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

cmd /k echo hello && cd c:\ && cd Windows
16
TroodoN-Mike

Puede usar call para superar el problema de las variables de entorno que se evalúan demasiado pronto - por ejemplo.

set A=Hello & call echo %A%
11
SSi

Se puede usar una cantidad de símbolos de procesamiento cuando se ejecutan varios comandos en la misma línea, y puede conducir al procesamiento de redirección en algunos casos, alterar la salida en otro caso o simplemente fallar. Un caso importante es colocar en la misma línea los comandos que manipulan las 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 demorada para actualizar los valores de las variables. Si su variable está indexada, use el comando CALL con los 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
6
sambul35

Por lo tanto, 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 iluminaría y desaparecería antes de que pudiera leerlo. Así que intenté canalizar a Pause, que no funciona cuando falla el comando (como se mencionó aquí El comando de pausa no funciona en el script .bat y aquí el comando de archivo por lotes PAUSE no funciona ). Así que intenté cmd /k pero eso deja la ventana abierta para más comandos (solo quiero leer el resultado). Así que agregué una pause seguida de exit a la cadena, dando como resultado 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 aparece el mensaje "Presione cualquier tecla para continuar ...", luego la ventana de comando se cierra cuando se presiona una tecla.

PD Para otras personas que puedan estar interesadas, puede usar las siguientes entradas del archivo .reg para agregar una asociación dllfile a los archivos .dll y luego una extensión de comando RegAsm a eso (observe las comillas escapadas 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 menú de clic derecho en Niza para registrar un ensamblaje.

5
SNAFUBAR

cmd /c ipconfig /all & Output.txt

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

5
dpp.2325

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

color 0a & start chrome.exe

¡Aclamaciones!

3
PryroTech

Intento tener dos pings en la misma ventana, y es un comando en serie en la misma línea. Después de terminar el primero, ejecute el segundo comando.

La solución fue combinar con start /b en un comando de Windows 7.

Comience como de costumbre, sin /b, y ejecútelo en una ventana separada.

El comando utilizado para lanzar en la misma línea es:

start /b command1 parameters & command2 parameters

De cualquier forma, si desea analizar la salida, no recomiendo usar esto. Noté que la salida está codificada entre la salida de los comandos.

3
sdcxp

Bueno, tienes dos opciones: Piping, o simplemente &:

DIR /S & START FILE.TXT

O,

tasklist | find "notepad.exe"

Piping (|) es más para tomar la salida de un comando y ponerlo en otro. Y (&) solo está diciendo ejecutar esto, y eso. 

3
PyDever

No, cd / && tree && echo %time%. El tiempo que se hace eco es cuando se ejecuta el primer comando.

La tubería tiene algún problema, pero no es crítica siempre y cuando la gente sepa cómo funciona.

1
notarealname

Cuando trate de usar o manipular variables en una línea, ¡tenga cuidado con su contenido! P.ej. una variable como la siguiente

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

puede llevar a muchos problemas imposibles de manejar si lo usa como %PATH%

  1. Los paréntesis de cierre terminan su declaración de grupo.
  2. Las comillas dobles no le permiten usar %PATH% para manejar el problema de paréntesis
  3. ¿Y qué contendrá una variable referenciada como %USERPROFILE%?
0
V15I0N

Un ejemplo más: por ejemplo, cuando usamos el sistema de compilación gulp, en lugar de

gulp - por defecto> construir

gulp build - construir build-folder

gulp watch - iniciar archivo-watch

gulp dist - construir una carpeta dist

Podemos hacer eso con una sola línea:

cd c:\xampp\htdocs\project & gulp & gulp watch
0
Mile Mijatovic

Sí hay. Es y.

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

y se ejecutará independientemente.

Es simple: solo diferenciarlos con signos &&. Ejemplo: 

echo Hello World && echo GoodBye World

Goodbye World se imprimirá después de Hello World.

0
Rajan Dhanowa