5

bashとCMDrm not-exists && lsでは、複数のコマンドをつなぎ合わせることができます。各コマンドは、前のコマンドが成功した場合にのみ条件付きで実行されます。

PowerShellでは実行できますがrm not-exists; ls、失敗した場合lsでも常に実行されrmます。

bashとCMDが行う機能を(1行で)簡単に複製するにはどうすればよいですか?

4

2 に答える 2

5

Powershell のほとんどのエラーは、デフォルトで「非終了」です。つまり、エラーが発生してもスクリプトの実行が停止することはありません。そのためls、コマンドでエラーが発生した後でも実行されますrm

ただし、この動作はいくつかの方法で変更できます。$errorActionPreference変数 (例: )を使用してグローバルに変更したり、すべてのコマンドレットに共通$errorActionPreference = 'Stop'のパラメーターを設定して特定のコマンドに対してのみ変更したりできます。-ErrorActionこれは、あなたにとって最も理にかなったアプローチです。

# setting ErrorAction to Stop will cause all errors to be "Terminating"
# i.e. execution will halt if an error is encountered
rm 'not-exists' -ErrorAction Stop; ls

または、いくつかの一般的な省略形を使用して

rm 'not-exists' -ea 1; ls

-ErrorActionパラメータはヘルプで説明されています。タイプGet-Help about_CommonParameters

于 2013-02-27T01:40:00.557 に答える
0

PowerShell コマンドから終了コードを確認するには、$?.

たとえば、次のコマンドは削除を試み、not-exists成功すると実行されますls

rm not-exists; if($?){ ls }
于 2013-02-27T00:02:43.807 に答える