このエントリーをはてなブックマークに追加


PowerShellでファイル名の一部を変更するサンプルスクリプト

「複数のファイル名の一部を一気に変更したい」場合に記事が参考になると思います。
尚、サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。
必要に応じてバッククオートのエスケープ処理を追加してください。

当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。自己責任のもとで本資料をご利用ください。

動作確認環境

  • PowerShell
    PS D:\> $PSVersionTable.PSVersion
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      19041  3031
  • Windows 10 バージョン 22H2

ファイル名の一部を変更するPowerShellサンプルコード

以下のようにカレントディレクトリ内に、ファイルとフォルダが存在してい場合でサンプルコードを実行してみます。
実行例では、以下のファイル(除くディレクトリ)の 123XYZ に変更する Rename-Item コマンドを出力します。

PS D:\TestDir> Get-ChildItem

    ディレクトリ: D:\TestDir

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2023/08/09     20:45                directory1
-a----        2023/08/09     20:44              6 123.txt
-a----        2023/08/09     20:45              6 3212345.txt
-a----        2023/08/09     20:44              6 a123z.txt
-a----        2023/08/09     20:45              6 bar.txt
-a----        2023/08/09     20:45              6 foo.txt
-a----        2023/08/09     20:45              6 hoge123hoge.txt

ファイル名を変更するPowerShellサンプルコード

サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。

Function ReplaceFileName([string]$find, [string]$replace) {
  if (($find -ne "") -And ($replace -ne "")) {
    # カレントディレクトリのファイルのみ対象する
    $targetFiles = Get-ChildItem * | Where-Object { (Test-Path -PathType container $_) -ne $True }
    # 取得したファイル数分ループ
    foreach ($item in $targetFiles) {
      $newFileName = $item.Name.Replace($find, $replace)
      if ($newFileName -ne $item.Name) {
        # ファイル名が変わる対象ファイルのみコマンドをターミナルに出力
        # ファイル名を変更するコマンドを出力しているので出力を確認し使用してください
        Write-Host Rename-Item $item.Name $newFileName
      }
    }
  }
  else {
    Write-Host "Usage: "$myInvocation.MyCommand.name" findString replaceString"
  }
}

サンプルコードの使い方

サンプルコードの Function は以下のように呼び出します。

ReplaceFileName 変更前文字列, 変更後文字列

引数を渡さず実行すると以下のように Usage が表示されます。

PS D:\TestDir> ReplaceFileName
Usage:  ReplaceFileName  findString replaceString

対象はカレントディレクトリのみです。サブディレクトリは対象としていません。

実行例

変更前文字列に 123 、変更後文字列に XYZ を指定して実行した時の出力です。
ファイル名変更の Rename-Item を使ったコマンドが出力されました。
対象ファイルが無い場合は何も表示されず終了します。

PS D:\TestDir> ReplaceFileName 123 XYZ
Rename-Item 123.txt XYZ.txt
Rename-Item 3212345.txt 32XYZ45.txt
Rename-Item a123z.txt aXYZz.txt
Rename-Item hoge123hoge.txt hogeXYZhoge.txt
PS D:\TestDir>

以上、PowerShellでファイル名の一部を変更するサンプルスクリプトでした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-08-09 (水) 21:12:13