bashとCMDrm not-exists && lsでは、複数のコマンドをつなぎ合わせることができます。各コマンドは、前のコマンドが成功した場合にのみ条件付きで実行されます。
PowerShellでは実行できますがrm not-exists; ls、失敗した場合lsでも常に実行されrmます。
bashとCMDが行う機能を(1行で)簡単に複製するにはどうすればよいですか?
bashとCMDrm not-exists && lsでは、複数のコマンドをつなぎ合わせることができます。各コマンドは、前のコマンドが成功した場合にのみ条件付きで実行されます。
PowerShellでは実行できますがrm not-exists; ls、失敗した場合lsでも常に実行されrmます。
bashとCMDが行う機能を(1行で)簡単に複製するにはどうすればよいですか?
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
PowerShell コマンドから終了コードを確認するには、$?.
たとえば、次のコマンドは削除を試み、not-exists成功すると実行されますls。
rm not-exists; if($?){ ls }