PowerShell におけるアンパサンドと二重アンパサンドの置換

PowerShell におけるアンパサンドと二重アンパサンドの置換

Windows のネイティブ CMD プロセッサでは、 を使用し&てコマンドを連結し、1 つのコマンドを他のコマンドの直後に実行することができます。A は、&&最初のコマンドがエラーなしで完了した場合にのみ、2 番目のコマンドを実行します。

|これは、最初のコマンドの出力をパイプでつなぐのとは異なります。ではありません2 番目のコマンドに送信されると、コマンドは単純に次々に実行され、それぞれの出力が通常の場所に送信されます。

ただし、 PowerShell で&または を使用しようとするとエラーが発生します。PowerShell で同様の関数を使用できるのでしょうか、それともこの機能は廃止されるのでしょうか?&&

答え1

PowerShell の演算子は、またはセミコロン&だけです;

PowerShell の演算子はステートメント&&として実行する必要がありますif

Command ; if($?) {Command}

例:

tsc ; if($?) {node dist/run.js}

答え2

ほぼ同じように使用できる次の関数を試してみてください。

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

&&では を に置き換えることができます; aa。これはまだ完璧ではありませんが、はるかに簡潔です。

cls && build

なる

cls; aa build

答え3

更新: Powershell 7でネイティブに実行できるようになりました

Write-Output 'First' && Write-Output 'Second'

第一
第二

しかし、最初のコマンドが失敗した場合(ここで に注意してくださいWrite-Error):

Write-Error 'Bad' && Write-Output 'Second'

悪い

ソース :https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipeline_chain_operators?view=powershell-7.3

関連情報