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

preguntado el 08 de noviembre de 11 a las 18:11

21 Respuestas

Así 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ó correctamente:

dir && echo foo

La sintaxis simple y comercial (&) 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 bastantes otros puntos sobre esto que encontrará al desplazarse hacia abajo en esta página.

A continuación se muestran los datos históricos, para aquellos que puedan encontrarlos educativos.

Antes de eso, la sintaxis && era solo una característica del reemplazo de shell 4DOS antes de que esa característica fuera agregada 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 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é con ^ T aquí.

dir ^T echo foo

Respondido 24 Oct 17, 05:10

Funciona también en Win 8.0 y 8.1. - MEMARCA

@Fallenreaper, eso funciona en la recta cmd rápido también, así que supongo que no es un mal hábito. :) - usuario909694

@Fallenreaper Asegúrese de conocer la diferencia práctica entre los dos: vea la respuesta de Raihan a continuación. - Moshe Katz

Te tengo. A && B, B solo se ejecutará si A tiene éxito, mientras que A & B ejecutará B después de A, sin importar cuál sea el resultado de A. Gracias por el aviso - Caído

@infografnet Ese es un tema diferente. Se ejecutan ambos comandos, pero las sustituciones de variables de entorno se evalúan antes de que se ejecute realmente cualquiera de los comandos. Entonces echo %myvar% se ejecutará como echo OldValueOfMyVar. Este problema se puede resolver utilizando la función de expansión retardada (aunque solo está disponible en archivos por lotes). Así que intente lo siguiente dentro de un archivo por lotes: setlocal EnableDelayedExpansion && set MyVar=MyVal && echo !MyVar! && endlocal. (NOTA: la función requiere que utilice ! marcas en lugar de la % símbolos. - Desilusionado

Una cita de la documentación:

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

Puede ejecutar varios comandos desde una única línea de comandos o un script 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 actúan según 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 quizás desee ejecutar un comando solo si el comando anterior es exitoso.

Puede utilizar los caracteres especiales que se enumeran en la siguiente tabla para pasar varios comandos.

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

  • && [...]
    command1 && command2
    Úselo 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
    Úselo para ejecutar el siguiente comando || solo si el comando que precede a || 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 varios comandos.

  • ; or ,
    command1 parameter1;parameter2
    Úselo para separar los parámetros de los comandos.

Respondido 22 Abr '20, 12:04

Trata cmd /c "echo foo & echo bar". - Raihan

vagrant up && vagrant ssh funcionó sin comillas en Windows 10. - furman87

¡Gracias! Yo no sabia de chamuscar & - lo hace asincrónico y ejecuta ambos en paralelo. Estaba atascado porque estaba usando && ¡con es sincrónico y solo continúa si el primero tiene éxito! - TetraDev

enlace de documentación roto, nueva ubicación technet.microsoft.com/en-us/library/bb490954.aspx - nkef

@TetraDev & no hace que los comandos sean asincrónicos o paralelos. command1 & command2 correrá command2 después de command1 ha completado. El éxito o el fracaso de command1 es irrelevante. - bornfromanegg

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

Respondido 15 Jul 17, 20:07

esto también es cierto para csh, tcsh y muchos más shells. nunca he visto ; antes en Linux - phuclv

@ LưuVĩnhPhúc en conchas estilo sh, ; significa ejecutar el primer comando, esperar a que termine y luego ejecutar el segundo comando. & significa ejecutar el primer comando, ponerlo en segundo plano y ejecutar el segundo comando. Entonces, ambos programas se inician simultáneamente. Tenga en cuenta que estos no son símbolos combinados, son símbolos finales hasta el primer comando; puede ejecutar un solo comando en segundo plano con progname & sin tener un segundo comando. - MM

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

respondido 08 nov., 11:22

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

respondido 12 nov., 13:10

Puedes usar llámenos al para superar el problema de las variables ambientales que se evalúan demasiado pronto, p. ej.

set A=Hello & call echo %A%

respondido 13 mar '16, 14:03

Esto funciona solo si la variable aún no está configurada, en cuyo caso la echo imprime el los ancianos valor, no el nuevo valor. Al menos, esto es lo que observo en mi caja de Windows 7. - Craig M. Brandeburgo

Utilizo set A = first para asegurarme de que la variable no esté configurada. - SSi

Un mejor método es utilizar la expansión retardada (setlocal EnableDelayedExpansion en un guión o cmd /v). Por ejemplo: timeout 5 && cmd /v /c echo !TIME! && echo %TIME%. - Nick

Use ^ después del primer porcentaje para obtener el nuevo valor: configure A = Hola y llame a echo% ^ A% - Nicolas

¡Gracias Nick y Nicolas por sus soluciones! Traté de usarlos en un caso más general, cuando después planificadas hay varios comandos separados con &, y veo que funciona solo con trucos sintácticos adicionales. Con la solución de Nick, debería escapar del separador de comandos como ^ &: set var=Hello & cmd /v /c echo firstUsage=!var! ^& echo secondUsage=!var!. Con la solución de Nicolas debería repetir llámenos al antes de cada subcomando: set var=Hello & call echo firstUsage=%^var% & call echo secondUsage=%^var% (probablemente uno sepa cómo mejorar esto). - Alexander Samoylov

Un número de procesamiento de símbolos se puede usar cuando se ejecutan varios comandos en la misma línea y puede llevar a la redirección del procesamiento en algunos casos, alterar la salida en otros casos o simplemente fallar. Un caso importante es colocar 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 utilizan variables se colocan en la misma línea, debe utilizar la expansión retardada para actualizar los valores de las 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

Respondido el 23 de Septiembre de 17 a las 08:09

El ejemplo dado no funcionó para mí, pero el siguiente sí lo hizo: cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%" - sactiw

cmd /c ipconfig /all & Output.txt

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

Respondido el 17 de diciembre de 14 a las 03:12

Entonces, estaba tratando de habilitar la tarea específica de ejecutar RegAsm (conjunto de registro) desde un menú contextual. El problema que tuve fue que el resultado parpadeaba y desaparecía antes de que pudiera leerlo. Así que traté de canalizar Pause, que no funciona cuando falla el comando (como se menciona aquí El comando de pausa no funciona en el script .bat y aquí El comando de archivo por lotes PAUSA 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, resultando en lo siguiente:

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

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

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

[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 bonito menú contextual para registrar un ensamblado.

contestado el 23 de mayo de 17 a las 15:05

Bueno, tienes dos opciones: canalizar o simplemente &:

DIR /S & START FILE.TXT

O,

tasklist | find "notepad.exe"

Tubería (|) es más para tomar el resultado de un comando y ponerlo en otro. Y (&) solo dice ejecutar esto y aquello.

Respondido 15 Jul 17, 20:07

¿Podrías editar tu publicación para incluir una explicación de lo que & y | qué hacen y en qué se diferencian, si es que lo hacen? En este momento, las personas que no están familiarizadas con estos conceptos no pueden decidir por sí mismas cuál debe usarse en sus casos. - Mirek Długosz

Como yo era. Mi error. Editaré la publicación de inmediato. Lo aprecio. - PyDever

Debe ser "findtr" en lugar de solo "find" - Anu Shibin Joseph Raj

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!

Respondido el 13 de diciembre de 16 a las 07:12

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 símbolo del sistema de Windows 7.

Empiece como de costumbre, sin /be inícielo en una ventana separada.

El comando que se usa para iniciar 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.

Respondido 15 Jul 17, 20:07

Con Windows 10 también puedes usar scriptrunner:

ScriptRunner.exe -appvscript demoA.cmd arg1 arg2 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror -appvscript demoB.ps1 arg3 arg4 -appvscriptrunnerparameters -wait -timeout=30 -rollbackonerror

le permite iniciar algunos comandos en una línea que desee, puede ejecutarlos consecutivamente o sin esperar el uno al otro, puede poner tiempos de espera y retroceder en caso de error.

respondido 07 nov., 20:00

NO, cd / && tree && echo %time%. La hora en que se repite es a la que se ejecuta el primer comando.

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

Respondido 15 Jul 17, 20:07

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

gulp - predeterminado> construir

gulp build - construir carpeta de construcción

gulp watch - iniciar file-watch

gulp dist - construir carpeta-dist

Podemos hacer eso con una línea:

cd c:\xampp\htdocs\project & gulp & gulp watch

Respondido 15 Jul 17, 20:07

Sí hay. Es &.

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

& se ejecutará independientemente.

respondido 06 nov., 19:19

Utilizan & símbolo en Windows para usar el comando en una línea

C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook

como en linux usamos,

touch thisfile ; ls -lstrh

contestado el 20 de mayo de 20 a las 10:05

Intente crear un archivo .bat ot .cmd con esas líneas usando doskey clave y $T que es equivalente a & para hacer varias líneas de comando en una sola línea:

touch=echo off $T echo. ^> $* $T dir /B $T echo on

Creará un archivo vacío.

Ejemplo:

touch myfile

En cmd obtendrás algo como esto:

enter image description here

Pero como otros han mencionado anteriormente, realmente se recomienda usar & operador para hacer muchas líneas de comando en una línea desde el indicador de CMD.

Disfruta =)

respondido 26 nov., 20:01

Cuando intente utilizar o manipular variables en una línea, ¡tenga cuidado con su contenido! Por ejemplo, una variable como la siguiente

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

puede provocar 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 los paréntesis
  3. ¿Y cómo será una variable referenciada? %USERPROFILE% ¿Contiene?

Respondido el 23 de Septiembre de 17 a las 13:09

¿Qué tiene esto que ver con ejecutar dos comandos en una línea en Windows CMD? - Peter Mortensen

Es sencillo: solo diferenciarlos con && señales. Ejemplo:

echo "Hello World" && echo "GoodBye World".

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

respondido 06 nov., 19:19

Independientemente del hecho de que ya hay respuestas antiguas que muestran lo mismo, todavía no es del todo correcto. && es una condicional operador, el siguiente comando solo se ejecuta cuando el primer comando tuvo éxito (nivel de error = 0) - Jeb

por supuesto. Es evidente que si la persona quiere ejecutar dos comandos, esos dos serán correctos y, por lo tanto, todo saldrá bien. Rajan Dhanowa

Rajan: quiere decir "el siguiente comando solo se ejecuta si el primer comando tiene éxito". - Ivan

"Goodbye World se imprimirá después de Hello World"impresión proporcionada Hello World no falló. como ha dicho @jeb, && es condicional. & ejecuta comandos independientemente de si el anterior fue exitoso o no. - Pranav A.

Utilizan && entre comandos.
Por ejemplo: cls && echo 'hello' && dir c:

Respondido 27 ago 21, 11:08

Hay una respuesta de 9 años, que describe lo mismo, pero con explicaciones. Por cierto. && no siempre ejecuta el siguiente comando, solo cuando el primer comando se ejecuta con éxito - Jeb

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.