Respostas:
Assim em todos os sistemas operacionais da Microsoft desde 2000, e ainda hoje em dia:
dir & echo foo
Se você deseja que o segundo comando seja executado apenas se o primeiro sair com êxito:
dir && echo foo
A sintaxe do único e comercial (&) para executar vários comandos em uma linha remonta ao Windows XP, Windows 2000 e algumas versões anteriores do NT. (4.0 pelo menos, de acordo com um comentarista aqui.)
Existem alguns outros pontos sobre isso que você encontrará rolando esta página.
Seguem-se dados históricos, para aqueles que o acharem educacional.
Antes disso, a sintaxe && era apenas um recurso do 4DOS de substituição de shell antes que esse recurso fosse adicionado ao interpretador de comandos da Microsoft.
No Windows 95, 98 e ME, você usaria o caractere de pipe:
dir | echo foo
No MS-DOS 5.0 e posterior, por meio de algumas versões anteriores do interpretador de comandos para Windows e NT, o separador de comando (não documentado) era o caractere 20 (Ctrl + T) que representarei com ^ T aqui.
dir ^T echo foo
cmd
prompt direto , então suponho que não seja um mau hábito entrar. :)
Uma citação da documentação:
Usando vários comandos e símbolos de processamento condicional
Você pode executar vários comandos em uma única linha de comando ou script usando símbolos de processamento condicional. Quando você executa vários comandos com símbolos de processamento condicional, os comandos à direita do símbolo de processamento condicional atuam com base nos resultados do comando à esquerda do símbolo de processamento condicional.
Por exemplo, você pode querer executar um comando apenas se o comando anterior falhar. Ou, você pode querer executar um comando apenas se o comando anterior for bem-sucedido.
Você pode usar os caracteres especiais listados na tabela a seguir para passar vários comandos.
& [...]
command1 & command2
Use para separar vários comandos em uma linha de comando. Cmd.exe executa o primeiro comando e, em seguida, o segundo comando.
&& [...]
command1 && command2
Use para executar o comando a seguir && somente se o comando que precede o símbolo for bem-sucedido. Cmd.exe executa o primeiro comando e, em seguida, executa o segundo comando somente se o primeiro comando for concluído com êxito.
|| [...]
command1 || command2
Use para executar o comando a seguir || somente se o comando que precede || falha. Cmd.exe executa o primeiro comando e, em seguida, executa o segundo comando somente se o primeiro comando não foi concluído com êxito (recebe um código de erro maior que zero).
( ) [...]
(command1 & command2)
Use para agrupar ou aninhar vários comandos.
; or ,
command1 parameter1;parameter2
Use para separar os parâmetros de comando.
cmd /c "echo foo & echo bar"
.
vagrant up && vagrant ssh
funcionou sem aspas no Windows 10. #
&
- o torna assíncrono e roda os dois em paralelo. Eu estava preso porque estava usando &&
síncrono e só continua se o primeiro tiver êxito!
&
não torna os comandos assíncronos ou paralelos. command1 & command2
será executado command2
após a command1
conclusão. O sucesso ou fracasso de command1
é irrelevante.
&
é o equivalente do Bash para ;
(comandos de execução) e &&
é o equivalente do Bash de &&
(comandos de execução apenas quando o anterior não causou um erro).
;
antes no Linux
;
significa executar o primeiro comando, aguardar o término e executar o segundo comando. &
significa executar o primeiro comando, colocá-lo em segundo plano e executar o segundo comando. Portanto, ambos os programas são iniciados simultaneamente. Observe que eles não estão combinando símbolos, eles estão arrastando símbolos para o primeiro comando; você pode iniciar um único comando em segundo plano progname &
sem ter um segundo comando.
Você pode usar & para executar comandos um após o outro. Exemplo:c:\dir & vim myFile.txt
Se você deseja criar um atalho de cmd (por exemplo, na área de trabalho), adicione o parâmetro / k (/ k significa keep, / c fechará a janela):
cmd /k echo hello && cd c:\ && cd Windows
Você pode usar a chamada para superar o problema de as variáveis de ambiente serem avaliadas muito cedo - por exemplo,
set A=Hello & call echo %A%
echo
imprime o valor antigo , não o novo valor. Pelo menos, é o que observo na minha caixa do Windows 7.
setlocal EnableDelayedExpansion
em um script ou cmd /v
). Por exemplo: timeout 5 && cmd /v /c echo !TIME! && echo %TIME%
.
Vários símbolos de processamento podem ser usados ao executar vários comandos na mesma linha e podem levar ao redirecionamento de processamento em alguns casos, alterar a saída em outro caso ou simplesmente falhar. Um caso importante é colocar na mesma linha comandos que manipulam variáveis.
@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!
0 1
Como você vê no exemplo acima, quando comandos usando variáveis são colocados na mesma linha, você deve usar a expansão atrasada para atualizar seus valores de variável. Se sua variável estiver indexada, use o comando CALL com modificadores %% para atualizar seu valor na mesma linha:
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!%"
Então, eu estava tentando habilitar a tarefa específica de execução RegAsm
(registrar montagem) em um menu de contexto. A questão que eu tinha era que o resultado surgiria e desapareceria antes que eu pudesse lê-lo. Por isso, tentei fazer o piping para Pause
, o que não funciona quando o comando falha (como mencionado aqui O comando Pause não funciona no script .bat e o comando PAUSE no arquivo em lote PAUSE não funciona ). Então eu tentei, cmd /k
mas isso deixa a janela aberta para mais comandos (eu só quero ler o resultado). Então, adicionei um pause
seguido de exit
à cadeia, resultando no seguinte:
cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit
Isso funciona como um encanto - o RegAsm é executado no arquivo e mostra seus resultados; em seguida, o prompt "Pressione qualquer tecla para continuar ..." é exibido e a janela do prompt de comando é fechada quando uma tecla é pressionada.
PS Para outros interessados, você pode usar as seguintes entradas de arquivo .reg para adicionar uma associação de arquivo dll a arquivos .dll e, em seguida, uma extensão de comando RegAsm (observe as aspas e as 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"
Agora eu tenho um bom menu de botão direito para registrar uma montagem.
Eu tento ter dois pings na mesma janela e é um comando serial na mesma linha. Depois de terminar o primeiro, execute o segundo comando.
A solução foi combinar com start /b
um prompt de comando do Windows 7.
Comece como de costume, sem /b
e inicie em uma janela separada.
O comando usado para iniciar na mesma linha é:
start /b command1 parameters & command2 parameters
De qualquer forma, se você deseja analisar a saída, não recomendo usar isso. Notei que a saída está embaralhada entre a saída dos comandos.
Bem, você tem duas opções: Tubulação ou apenas &
:
DIR /S & START FILE.TXT
Ou,
tasklist | find "notepad.exe"
Piping ( |
) é mais para pegar a saída de um comando e colocá-lo em outro. E ( &
) está apenas dizendo, execute isso e aquilo.
&
e |
fazer e como eles diferem, se em tudo? No momento, pessoas não familiarizadas com esses conceitos são incapazes de decidir por si mesmas qual delas deve ser usada em seus casos.
Não, cd / && tree && echo %time%
. A hora ecoada é quando o primeiro comando é executado.
A tubulação tem algum problema, mas não é crítica desde que as pessoas saibam como ela funciona.
Mais um exemplo: por exemplo, quando usamos o gulp
sistema de compilação, em vez de
gulp
- padrão> compilar
gulp build
- construir pasta de construção
gulp watch
- inicie a observação de arquivos
gulp dist
- constrói dist-folder
Podemos fazer isso com uma linha:
cd c:\xampp\htdocs\project & gulp & gulp watch
Ao tentar usar ou manipular variáveis em uma linha, cuidado com o conteúdo delas! Por exemplo, uma variável como a seguinte
PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
pode levar a muitos problemas imprevisíveis se você o usar como %PATH%
%PATH%
para lidar com o problema de parênteses%USERPROFILE%
?Use o &
símbolo no Windows para usar o comando em uma linha
C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook
como no linux usamos,
touch thisfile ; ls -lstrh
Sim existe. É &
.
&&
executará o comando 2 quando o comando 1 estiver completo, desde que não falhe.
&
será executado independentemente.
É simples: basta diferenciá-los com &&
sinais. Exemplo:
echo "Hello World" && echo "GoodBye World".
"Goodbye World" será impresso após "Hello World".
&&
é uma condicional operador, o próximo comando só é executado quando o primeiro comando sucedido (errorlevel = 0)
Hello World
não falhe. como @jeb disse, &&
é condicional. &
executa comandos independentemente se o anterior foi bem-sucedido ou não.