PowerShellで特定の文字をファイル名に含むファイルを一括削除

こんにちは。
けいぞうです。

先日サーバー移行のプロジェクトでサクラエディタを使って大量の設定ファイルに対してグレップ置換を行うという作業をしたのですが、

サクラエディタはご丁寧に「skrold」というバックアップファイルを作成してくれていて、それを消すのが面倒くさかったので、PowerShellでスクリプトを作成しました。

ちなみにこの「skrold」というバックアップファイルはグレップ置換時のオプションだったので、チェックを外せば良かったのですが、気づくのが遅かった・・・。

Grep置換の使い方については以下の記事で解説しています⇩

[目次]

特定の文字列を含むファイルを一括取得

いきなり消すのは恐ろしいので、まずは削除対象ファイルの確認からです。

Get-ChildItemコマンドを使って取得することができます。

例えば、「C:\work」配下にあるskroldファイルを一括で取得したい場合は以下のように記述します。

Get-ChildItem -Path C:\work -Recurse -Include *.skrold | select FullName

Get-ChildItemについては下記の記事でも詳細を説明していますので、参考にどうぞ👇

実行するとこんな感じになります。

PS C:\Users> Get-ChildItem -Path C:\work -Recurse -Include *.skrold | select FullName

FullName
--------
C:\work\Script\TestScript.ps1.skrold
C:\work\test\memo_abc.txt.skrold
C:\work\test\memo_def.txt.skrold
C:\work\test\A\秘密のmemo_abc.txt.skrold
C:\work\test\A\秘密のmemo_def.txt.skrold

これで対象を確認して問題なければ、次の削除作業に入ります。

特定の文字列を含むファイルを一括削除

先ほどGet-ChildItemで使用したコマンドレットのワイルドカードをそのまま流用して以下のようなRemove-Itemコマンドを作成します。

Remove-Item -Path C:\work -Recurse -Include *.skrold

変わったところは「Get-ChildItem」が「Remove-Item」になったところと

select句が無くなったところだけです。

これできれいさっぱりゴミファイルが消えてくれました!✨