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 de ampersand (&) 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á desplazándose hacia abajo en esta página.
Siguen los datos históricos, para aquellos que pueden encontrarlo educativo
Antes de eso, la sintaxis && 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, usaría 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
cmd
, así que supongo que no es un mal hábito. :)
Una cita de la documentación:
Uso de múltiples comandos 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 después de && 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 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)
Use para agrupar o anidar múltiples comandos.
; or ,
command1 parameter1;parameter2
Se usa para separar los parámetros del comando.
cmd /c "echo foo & echo bar"
.
vagrant up && vagrant ssh
trabajó sin comillas en Windows 10.
&
, lo hace asíncrono y ejecuta ambos en paralelo. Estaba atascado porque estaba usando &&
síncrono y solo continúa si el primero tiene éxito.
&
no hace que los comandos sean asíncronos o paralelos. command1 & command2
correrá command2
después de que se command1
haya completado. El éxito o el fracaso de command1
es irrelevante.
&
es el equivalente de Bash para ;
(ejecutar comandos) y &&
es el equivalente de Bash de &&
(ejecutar comandos solo cuando lo anterior no ha causado un error).
;
antes en Linux
;
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 lanzan simultáneamente. Tenga en cuenta que estos no son símbolos combinados, son símbolos finales al primer comando; puede iniciar un solo comando en segundo plano progname &
sin tener un segundo comando.
Puede usar & para ejecutar comandos uno tras otro. Ejemplo:c:\dir & vim myFile.txt
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
Puede usar 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%
echo
imprime el antiguo valor, no el nuevo valor. Al menos, esto es lo que observo en mi cuadro de Windows 7.
setlocal EnableDelayedExpansion
en un script o cmd /v
). Por ejemplo: timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.
Se pueden usar varios símbolos de procesamiento cuando se ejecutan varios comandos en la misma línea, y pueden conducir a la redirección de procesamiento en algunos casos, alterar la salida en otro caso, 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 retardada para actualizar sus valores de 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
cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
Entonces, estaba tratando de habilitar la tarea específica de ejecución RegAsm
(ensamblaje de registro) desde un menú contextual. El problema que tuve fue que el resultado aparecería y desaparecería antes de que pudiera leerlo. Así que traté de canalizar Pause
, lo que no funciona cuando el comando falla (como se menciona aquí, el comando 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). Entonces agregué un pause
seguido de exit
a la cadena, lo que resultó en lo siguiente:
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Esto funciona de maravilla: 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.
PD Para otras personas que puedan estar interesadas, puede usar las siguientes entradas de archivo .reg para agregar una asociación de archivos dll a archivos .dll y luego una extensión de comando RegAsm (observe las comillas y 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.
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
un símbolo del sistema de Windows 7.
Comience como de costumbre, sin /b
, e inicie en una ventana separada.
El comando utilizado para iniciar en la misma línea es:
start /b command1 parameters & command2 parameters
De cualquier manera, si desea analizar la salida, no recomiendo usar esto. Noté que la salida está codificada entre la salida de los comandos.
Bueno, tienes dos opciones: tuberías, 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 dice ejecutar esto y aquello.
&
y |
hace y en qué se diferencian? 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.
No, cd / && tree && echo %time%
. El tiempo repetido es cuando se ejecuta el primer comando.
La tubería tiene algún problema, pero no es crítica mientras la gente sepa cómo funciona.
Un ejemplo más: por ejemplo, cuando usamos el gulp
sistema de compilación, en lugar de
gulp
- predeterminado> construir
gulp build
- construir carpeta de compilación
gulp watch
- iniciar la observación de archivos
gulp dist
- construir dist-folder
Podemos hacer eso con una línea:
cd c:\xampp\htdocs\project & gulp & gulp watch
Cuando intente 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 ocasionar muchos problemas imposibles de manejar si lo usa como %PATH%
%PATH%
para manejar el problema de paréntesis%USERPROFILE%
?Use el &
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
Sí hay. Es &
.
&&
ejecutará el comando 2 cuando el comando 1 esté completo siempre que no haya fallado.
&
se ejecutará independientemente
Es simple: simplemente diferenciarlos con &&
signos. Ejemplo:
echo "Hello World" && echo "GoodBye World".
"Goodbye World" se imprimirá después de "Hello World".
&&
es un operador condicional , el siguiente comando solo se ejecuta cuando el primer comando tuvo éxito (errorlevel = 0)
Hello World
no haya fallado. como ha dicho @jeb, &&
es condicional. &
ejecuta comandos independientemente de si el anterior fue exitoso o no.