unir - ¿Cómo ejecuto dos comandos en una línea en Windows CMD?
ejecutar varios comandos linux desde java (16)
Bueno, tienes dos opciones: Canalización, 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 aquello.
Quiero ejecutar dos comandos en una consola de Windows CMD.
En Linux lo haría así.
touch thisfile ; ls -lstrh
¿Cómo se hace en Windows?
Cuando trate de usar 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 llevar a 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 paréntesis - ¿Y qué contendrá una variable referenciada como
%USERPROFILE%
?
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 indicador de comandos 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.
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ó correctamente:
dir && echo foo
La sintaxis de signo (&) individual 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 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é con ^ T aquí.
dir ^T echo foo
No, cd / && tree && echo %time%
. El tiempo que se repite 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.
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!
Por lo tanto, estaba intentando habilitar la tarea específica de ejecutar RegAsm
(registro de 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 Pausa no funciona en el script .bat y aquí el comando PAUSAR archivo por lotes no funciona ). Así que probé 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 encanto: RegAsm se ejecuta en el archivo y muestra sus resultados, luego se muestra el mensaje "Presione cualquier tecla para continuar ...", luego la ventana del símbolo del sistema se cierra cuando se presiona una tecla.
PS Para otros interesados, puede usar las siguientes entradas del archivo .reg para agregar una asociación dllfile a los archivos .dll y luego una extensión del 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 buen menú contextual para registrar un ensamblaje.
Puede utilizar la llamada para superar el problema de las variables de entorno que se evalúan demasiado pronto, por ejemplo,
set A=Hello & call echo %A%
Puedes usar & para ejecutar comandos uno tras otro. Ejemplo: c:/dir & vim myFile.txt
Se pueden usar varios símbolos de procesamiento cuando se ejecutan varios comandos en la misma línea, y pueden conducir al procesamiento de la redirección 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 usan variables se colocan en la misma línea, debe usar la expansión demorada para actualizar sus valores 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
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
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 dist-folder
Podemos hacer eso con una sola línea:
cd c:/xampp/htdocs/project & gulp & gulp watch
Una cita de la documentación:
- Fuente: Microsoft, documentación de productos de Windows XP Professional, descripción general del shell de comandos
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 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 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 enumerados en la siguiente tabla para pasar varios comandos.
& [...]
command1 & command2
Se usa para separar varios 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 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
Utilice para ejecutar el comando siguiente || solo si el comando precedente || falla Cmd.exe ejecuta el primer comando y, a continuación, 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.
&
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).
cmd /c ipconfig /all & Output.txt
Este comando ejecuta el comando y abre el archivo Output.txt
en un solo comando
Es simple: simplemente diferenciarlos con signos &&. Ejemplo:
echo Hello World && echo GoodBye World
Goodbye World se imprimirá después de Hello World.