PowerShellでのアンパサンドとダブルアンパサンドの置き換え


28

WindowsのネイティブCMDプロセッサでは、&コマンドを一緒に文字列化して、あるコマンドが次のコマンドの直後に実行されるようにすることができます。A &&は、最初のコマンドがエラーなしで完了した場合にのみ、2番目のコマンドを実行します。

これは|、最初のコマンドからの出力が2番目のコマンドに送信され、コマンドが次々に実行されるだけで、それぞれの出力が通常の場所に送信されるという点で、コマンドのパイピングとは異なります。

私が使用しようとすると、しかし、私はエラーを取得する&か、&&PowerShellで。PowerShellで同様の機能を使用できますか、またはこの機能は廃止されますか?



興味深い質問は、powershellのメタプログラミングを使用してこの機能を提供できるかどうかです。&&
soandos12年

回答:


35

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

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

Command ; if($?) {Command}


1

おおよそ同じ方法で使用できるこの関数を試してください。

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

&&はに置き換えることができますが; aa、まだ完全ではありませんが、もっと簡潔です。

cls && build

になる

cls; aa build

1
あなたが使用args[0]しているのはなぜfunction aa ($cmd)ですか?
ルフィン14年

これは、コマンドを呼び出すための脆弱な方法です。スクリプトブロックを使用してコマンドを渡し、後者では変数の子スコープを作成するため、.ではなく&でそれらを呼び出します。
mklement0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.