Substituições para e comercial e duplo e comercial no PowerShell

28

No processador CMD nativo do Windows, você pode usar &para agrupar comandos juntos para que um seja executado imediatamente após o outro. A &&executará o segundo comando somente se o primeiro for concluído sem erros.

Isso é diferente dos comandos de canalização, |pois na saída do primeiro comando não é enviado para o segundo comando, os comandos são simplesmente executados um após o outro e a saída para cada um é enviada para o local habitual.

No entanto, recebo um erro ao tentar usar &ou &&no PowerShell. Existem funções semelhantes disponíveis no PowerShell ou esse recurso está sendo preterido?

Iszi
fonte
Uma questão interessante é se metaprogramming do PowerShell poderia ser usado para fornecer essa funcionalidade usando&&
soandos

Respostas:

35

O &operador no PowerShell é apenas o ;ponto-e-vírgula.

O &&operador no PowerShell deve ser executado como uma ifinstrução.

Command ; if($?) {Command}

SS4Soku
fonte
1

Tente esta função, que pode ser usada aproximadamente da mesma maneira:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Agora &&pode ser substituído por ; aa, o que, embora ainda não seja perfeito, é muito mais sucinto.

cls && build

torna-se

cls; aa build
despenteado
fonte
1
Alguma razão não estilística para você usar args[0]e não function aa ($cmd)?
Ruffin
Esta é uma maneira frágil de chamar comandos; use blocos de script para passar comandos e invoque aqueles com ., não &, porque o último cria um escopo filho para variáveis.
precisa saber é o seguinte