¿Cómo ejecuto dos comandos en una línea en Windows CMD?
Frecuentes
Visto 1,135 veces
1135
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?
21 Respuestas
1592
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, 03:10
627
Una cita de la documentación:
- Fuente: Microsoft, documentación del producto de Windows XP Professional, Descripción general del shell de comandos
- También: Un índice AZ de comandos CMD de Windows
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, 10:04
Intente 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. - nacido de un huevo
80
&
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, 18: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
25
Puede usar & para ejecutar comandos uno tras otro. Ejemplo: c:\dir & vim myFile.txt
respondido 08 nov., 11:18
23
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:06
20
Puedes usar llamar 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, 11: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 llamar al antes de cada subcomando: set var=Hello & call echo firstUsage=%^var% & call echo secondUsage=%^var%
(probablemente uno sepa cómo mejorar esto). - Alejandro Samoylov
10
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 06: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!%"
- sacrificar
8
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 00:12
8
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 13:05
5
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, 18: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 Dlugosz
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
4
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 04:12
4
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 /b
e 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, 18:07
2
Con Windows 10 también puedes usar guionista:
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 06 nov., 20:21
1
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, 18:07
1
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, 18:07
0
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:16
0
Utilice la herramienta &
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 08:05
0
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:
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 25 nov., 20:22
-1
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%
- Los paréntesis de cierre terminan su declaración de grupo
- Las comillas dobles no le permiten usar
%PATH%
para manejar el problema de los paréntesis - ¿Y cómo será una variable referenciada?
%USERPROFILE%
¿Contiene?
Respondido el 23 de Septiembre de 17 a las 11:09
¿Qué tiene esto que ver con ejecutar dos comandos en una línea en Windows CMD? - Pedro Mortensen
-2
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:16
Independientemente del hecho de que ya hay respuestas antiguas que muestran lo mismo, todavía no es del todo correcto. &&
es un 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.
-3
Utilice la herramienta &&
entre comandos.
Por ejemplo: cls && echo 'hello' && dir c:
Respondido 27 ago 21, 09: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 windows batch-file command-line cmd or haz tu propia pregunta.
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. - Moisés 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á comoecho 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