PowerShell/PowerShellでファイル名の一部を変更するサンプルスクリプト
の編集
Top
/
PowerShell
/
PowerShellでファイル名の一部を変更するサンプルスクリプト
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * PowerShellでファイル名の一部を変更するサンプルスクリプト [#bdc06610] 「複数のファイル名の一部を一気に変更したい」場合に記事が参考になると思います。~ 尚、サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。~ 必要に応じてバッククオートのエスケープ処理を追加してください。 ''当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。自己責任のもとで本資料をご利用ください。'' #contents * 動作確認環境 [#k43be80b] -PowerShell PS D:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 19041 3031 - Windows 10 バージョン 22H2 * ファイル名の一部を変更するPowerShellサンプルコード [#s73b0b1a] 以下のようにカレントディレクトリ内に、ファイルとフォルダが存在してい場合でサンプルコードを実行してみます。~ 実行例では、以下のファイル(除くディレクトリ)の ''123'' を ''XYZ'' に変更する 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サンプルコード [#b11b987a] サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。 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" } } * サンプルコードの使い方 [#y1b77cc0] サンプルコードの Function は以下のように呼び出します。 ReplaceFileName 変更前文字列, 変更後文字列 引数を渡さず実行すると以下のように Usage が表示されます。 PS D:\TestDir> ReplaceFileName Usage: ReplaceFileName findString replaceString 対象はカレントディレクトリのみです。サブディレクトリは対象としていません。 * 実行例 [#m0e9a8f0] 変更前文字列に 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でファイル名の一部を変更するサンプルスクリプトでした。
タイムスタンプを変更しない
#navi(../) * PowerShellでファイル名の一部を変更するサンプルスクリプト [#bdc06610] 「複数のファイル名の一部を一気に変更したい」場合に記事が参考になると思います。~ 尚、サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。~ 必要に応じてバッククオートのエスケープ処理を追加してください。 ''当サイトの資料により直接的および間接的障害が生じても一切責任を負いません。自己責任のもとで本資料をご利用ください。'' #contents * 動作確認環境 [#k43be80b] -PowerShell PS D:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 19041 3031 - Windows 10 バージョン 22H2 * ファイル名の一部を変更するPowerShellサンプルコード [#s73b0b1a] 以下のようにカレントディレクトリ内に、ファイルとフォルダが存在してい場合でサンプルコードを実行してみます。~ 実行例では、以下のファイル(除くディレクトリ)の ''123'' を ''XYZ'' に変更する 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サンプルコード [#b11b987a] サンプルコードなので、ファイル名に[]やスペースが存在するとエスケープ処理を実装していないので上手く動作しないのでご注意ください。 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" } } * サンプルコードの使い方 [#y1b77cc0] サンプルコードの Function は以下のように呼び出します。 ReplaceFileName 変更前文字列, 変更後文字列 引数を渡さず実行すると以下のように Usage が表示されます。 PS D:\TestDir> ReplaceFileName Usage: ReplaceFileName findString replaceString 対象はカレントディレクトリのみです。サブディレクトリは対象としていません。 * 実行例 [#m0e9a8f0] 変更前文字列に 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でファイル名の一部を変更するサンプルスクリプトでした。
テキスト整形のルールを表示する