PowerShellで特定の拡張子「以外」のファイルを全て削除するワンライナー

コンピュータ

以下の例は、カレントディレクトリのファイルで拡張子が「.csproj」以外のファイルを全て削除します。

例:

ls * -File | ? { -not ($_.Name -like "*.csproj") } | rm

まず
ls * -File
は、カレントディレクトリのファイルの一覧を取得

次の
? { ... }
の部分はWhere-Objectのエイリアスで、
前段で取得したファイルの一覧から、$_.Nameで絞り込みを行います。

条件は
-like "*.csproj"
*はワイルドカードで全ての文字が当てはまりますが、末尾は.csprojになる文字列が条件となります。
拡張子はファイル名が末尾にくるので、結果として拡張子の絞り込みになります。

この段階では.csprojのみで絞り込みがおこなわれますので、
-not ( ... )
で条件を反転させ.csproj以外のファイルを絞り込みとなります。

その次の
rm
はファイルの削除コマンドで、前段で絞り込まれたファイルの全て削除します。

コメント