&&
é notoriamente difícil de pesquisar no google, mas o melhor que encontrei é este artigo que diz usar -and
.
Infelizmente, ele não fornece mais informações e não consigo descobrir o que devo fazer -and
(novamente, uma coisa notoriamente difícil de procurar)
O contexto em que estou tentando usá-lo é "execute cmd1 e, se for bem-sucedido, execute cmd2", basicamente este:
csc /t:exe /out:a.exe SomeFile.cs && a.exe
Esse deve ser um ponto fácil para alguns que sabem, obrigado!
Edit: Se você apenas deseja executar vários comandos em uma única linha e não se importa se o primeiro falha ou não, você pode usá-lo. ;
Para a maioria dos meus objetivos, tudo bem.
Por exemplo: kill -n myapp; ./myapp.exe
.
syntax
powershell
Orion Edwards
fonte
fonte
&&
e||
se tornar parte do PowerShell: vote no recurso aqui .!sym
.&&
e||
! Pesar no PRRespostas:
No CMD, '&&' significa "execute o comando 1 e, se for bem-sucedido, execute o comando 2". Eu o usei para coisas como:
No PowerShell, a coisa mais próxima que você pode fazer é:
Tem a mesma lógica, mas o texto de saída dos comandos é perdido. Talvez seja bom o suficiente para você.
Se você estiver fazendo isso em um script, provavelmente será melhor separar as instruções, assim:
27/11 2019 : o
&&
operador já está disponível para o PowerShell 7 Preview 5+ :fonte
build ; if ($?) { run_tests }
na linha de comando.bash
idéias no PowerShell. É a funcionalidade básica do shell. Até agora, o melhor que vi é obuild ; if ($?) { run_tests }
que vou usar a partir de agora. Espero que a equipe do PowerShell adicione&&
suporte!&& e || estavam na lista de itens a serem implementados (ainda estão), mas não apareceram como a próxima coisa mais útil a ser adicionada. O motivo é que temos -AND e -OR. Se você acha que é importante, envie uma sugestão no Connect e a consideraremos para a V3.
fonte
-AND
-and
o resultado é o resultado, não equivalente.Tente o seguinte:
fonte
$ErrorActionPreference
controla apenas como os erros não terminados relatados pelos cmdlets são tratados; utilitários externos comocsc
ea.exe
nunca relatam esses erros (eles refletem apenas o status de saída em$?
(sinalizador de sucesso) e$LASTEXITCODE
(o código de saída específico relatado)); portanto, sua linha de comando equivale à execução incondicional de ambos os comandos (o equivalente acmd
'scsc /t:exe /out:a.exe SomeFile.cs & a.exe
)Se seu comando estiver disponível no cmd.exe (algo como,
python ./script.py
mas não no PowerShell, comoii .
(Isso significa abrir o diretório atual pelo explorer)), você poderá executar o cmd.exe no PowerShell. A sintaxe é assim:Aqui,
&&
é fornecido pela sintaxe cmd descrita nesta pergunta .fonte
Eu tentei esta sequência de comandos no PowerShell:
Teste de Fisrt
($MyVar -ne $null)
retornou verdadeiro e(Get-Content $MyVar)
também retornou verdadeiro .Segundo teste
($MyVar -ne $null)
retornou false e até agora devo assumir que(Get-Content $MyVar)
também retornou false .O terceiro teste comprovou que a segunda condição nem sequer foi analisada.
($MyVar -ne $null)
retornou false e provou que a segunda condição(Get-Content "C:\MyTxt.txt")
nunca foi executada, retornando false em todo o comando.fonte
Pergunta muito antiga, mas para os novatos: talvez a versão do PowerShell (semelhante, mas não equivalente ) que a pergunta está procurando, seja a
-and
seguinte:(build_command) -and (run_tests_command)
fonte
&&
, pois ignora o código de saída debuild_command
.;
é o equivalente&
em cmd e;
em bash. Definitivamente não é o mesmo que&&
no cmdDepende do contexto, mas aqui está um exemplo de "-e" em ação:
Portanto, está obtendo todos os arquivos maiores que 10kb em um diretório cujo nome de arquivo começa com "f".
fonte
É um pouco mais longo que "&&", mas realiza a mesma coisa sem scripts e não é muito difícil de lembrar. Antes tarde do que nunca. :)
fonte
Start-Process
é a ferramenta errada a ser usada para chamar utilitários de linha de comando em geral. Especificamente, conforme usado aqui,Start-Process
é executado defilename1.exe
forma assíncrona em uma nova janela do console e não retorna nada , que é avaliado em um contexto booleano$false
. Mesmo que você o tenha omitidoStart-Process
(e é assim que você deve chamar os utilitários de linha de comando - diretamente), a abordagem será insuficiente, porque o resultado da condicional depende se o utilitário produziu alguma saída stdout, que não tem relação garantida conseguiu ou não.Eu acho que uma declaração simples se pode conseguir isso. Depois que vi a resposta de mkelement0 acima desse último status de saída é armazenada em $?, Juntei o seguinte:
Portanto, para o exemplo do op, seria:
fonte
Um equivalente detalhado é combinar
$LASTEXITCODE
e-eq 0
:Não sei por
if ($?)
que não funcionou para mim, mas este funcionou.fonte
Podemos tentar este comando em vez de usar o método &&
tente {hostname; if ($ lastexitcode -eq 0) {ipconfig / all | findstr / i bios}} pegue {echo err} finalmente {}
fonte
try
/catch
, porque é necessário apenas para encerrar erros, que utilitários externos, comohostname
,ipconfig
efindstr
não podem disparar. A verificação$LASTEXITCODE
é necessária apenas se você quiser conhecer o código de saída específico definido por um utilitário externo - o sucesso ou falha abstrata é refletida$?
, assim como nos cmdlets nativos.&&
no Unix é muito parecido com try / catch, pois não exige que você agrupe comandos subsequentes em um novo bloco (ou seja}
) quando você executa um curto-circuito nos comandos posteriores (ignore-os). Eu acho que umaAmpAmp
função / filtro que lança quandoif (!?) { throw "last command failed" }
seria um substituto muito útil para portar&&
para o PowerShell. uso :csc /t:exe /out:a.exe SomeFile.cs; AmpAmp; a.exe