ファイル名を一括で変更するコード【ps1ファイル】

おはようございます、すぎやまです。

この記事は、ファイル名から一部の言葉を一括で削除する方法を紹介した記事の、
削除ではなく置き換える場合の方法を紹介しています。

こんな方におすすめ

  • 削除じゃなくて置き換えがしたいけど、方法がわからない方
  • ChatGPTを使ったけど、機能しなかった方

例えばファイルを保存するとき、「(日付)_(ファイル名)」のようにファイルを保存しておくことがあります。
このとき、最初は年度をつけていなかったけれど、後から追加したくなることがあったりします。

他にもハイフンを全角の「_」にしていたけれど、半角の「_」に直したいといったこともあります。

そういったとき、ファイル数が多いと削除して書き直すのは手間がかかり、ミスも発生しやすいです
そういった方のために、今回はファイルの特定の文字を一括で置き換える方法をお伝えします!

それではどうぞ!

コード紹介

文字を一括で置き換えるコードは下記の通りです

# Prompt user for file extension
$fileExtension = Read-Host "対象ファイルの拡張子を入力後、エンターキーを入力してください(例: xlsx,docx,txt,csv ...)"

# Prompt user for the string to be removed from filenames
$oldString = Read-Host "ファイル名の中で、削除したい文字を入力後、エンターキーを入力してください:"

$newString = Read-Host "新たに追加したい文字を入力後、エンターキーを入力してください:"

# Set the target directory to the current directory
$targetDirectory = Get-Location

# Get all files with the specified extension in the target directory
Get-ChildItem -Path $targetDirectory -Filter *.$fileExtension | ForEach-Object {
    $filename = $_.BaseName
    $newFilename = $filename -replace [regex]::Escape($oldString), $newString

    # If the filename has changed, rename the file
    if ($filename -ne $newFilename) {
        $newFilePath = Join-Path -Path $targetDirectory -ChildPath "$newFilename.$fileExtension"
        Rename-Item -Path $_.FullName -NewName $newFilePath
    }
}

Write-Host "Renaming complete."
Pause

この上のコードをコピーして、テキストに張り付けてps1ファイルにしてください。
それだけでさっきのファイルが完成します!

変更点

元のファイルとの違いは
「$newFilename = $filename -replace [regex]::Escape($oldString), $newString」
の部分です。

ポイントは
-replaceで文字を置き換える
です!

ポイント:-replaceで文字を置き換える

replaceコマンドは、環境変数に関係するコマンドです。

これを使用し、$oldString を  $newString に置き換えています。

ちなみに、削除するだけのファイルでは、
newStringを入力する代わりに、空白と置き換える動作をしています。

また、[regex]::Escape は正規表現とする記載です。

ファイルの使い方

基本的には特定の文字を削除するバッチファイルと同じ使い方です。
こちらの記事を参照ください!

以上、最後まで読んでいただき誠にありがとうございました。

タイトルとURLをコピーしました