PowerShellと正規表現で、指定したフォルダにあるファイルの名前まとめて変換する方法を紹介します。
仕様
動作仕様
Windows PowerShellでフォルダ内のファイル名を、全てまとめて変換します。
ただし、様々なファイル名の形式にできてしまいますので、今回は以下の例題をもとに考えます。
例題フォルダ構成
c:\temp\test2の下に、下記のファイルが格納されているものとします。
例題
フォルダ内のファイル「test1_test0001_nnnn.txt」のうち、「test0001」の個所をまとめて「abc」に置き換えます。
使用する正規表現
下記の正規表現で、「test0001」の個所を検索します。
(?<=^test1_)test[0-9]{4}
test1_で始まる個所から読み込んで「test+4文字の数字」のある部分を検索する正規表現です。
※また、実は別にこんな凝った正規表現でなくとも、「test0001」でも十分なのですが、「test2_test0001_0002.txt」や「test1test0001_0002.txt」、「test1_test0001_test0001.txt」のようなファイルがあった時のために少し指定を細かくしています。
ソースコード
下記のコードを記述し、「ChangeFileName.ps1」のファイル名で適当な場所に保存します。
ChangeFileName.ps1
Set-Location C:\temp\test2
Get-ChildItem *.txt| Rename-Item -NewName {$_.Name -replace '(?<=^test1_)test[0-9]{4}','abc'}
実施していることは、下記の2点です。
- Set-Locationで「C:¥temp\test2」のフォルダに移動する。
- Get-ChildItemでテキストファイルを取得する。
- Rename-Itemから-replace ‘~’,’~’のオプションでファイル名を置換する。
実行手順
まず先ほどのスクリプトを、拡張子*.ps1として保存します。
次に実行は、右クリックメニュー「PowerShellで実行」で実行します。
実行前
実行前はファイル名に「test0001」が含まれています。
実行後
実行後はファイル名が「test1_abc_nnnn.txt」の形式にまとめて変更されました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント