バッチファイルでファイル名一括変更

f:id:IsThisAPen:20171209221538p:plain:w400

POINT

  • バッチファイルで複数のファイル名を変更(リネーム)する方法の紹介.
  • ファイル名の切り出し・文頭への文字列追加・末尾への文字列追加の方法を解説.
  • 応用例として,バックアップを取ってから処理を行うバッチファイルを作成した.

バッチファイルで「フォルダ内のファイルの名前」を一括変更する方法を紹介します.必要に応じて,次の記事も参考にしてください:

ファイル名の切り出し

拡張子が".txt"である全ファイル名の頭2文字を削除 (abcde.txt→cde.txt)
「拡張子含めたファイル名」に対しファイル名の切り出しを行うと,文字数を間違えた場合に「拡張子」までリネームされてしまう可能性があります.

これを避けるため,「拡張子を除くファイル名(以下のFILENAME)」だけを編集するようにします.

for %%F in (*.txt) do call :sub "%%F"
goto :EOF

:sub
  set BEFORE=%~1
  set FILENAME=%~n1
  set EXTENSION=%~x1
  set AFTER=%FILENAME:~3%%EXTENSION%
  ren "%BEFORE%" "%AFTER%"
goto :EOF

  • 変数
    • BEFORE: もとのファイル名.
    • FILENAME: 拡張子を除くファイル名.
    • EXTENSION: 拡張子.
    • AFTER: 変更後のファイル名.部分参照で定めている.
  • ポイント
    • %~I: 全ての引用句"を削除して%Iを展開(ここでは,「"%%F"⇒%%F」となる).
    • %~nI: %Iをファイル名に展開
    • %~xI: %Iを拡張子に展開
    • 部分参照: %環境変数:~[-]開始オフセット[,[-]長さ]%


部分参照意味X文字のとき
%I:~m%文頭のm文字目を除く文字列(m+1)~X
%I:~m,n%文頭のm文字目を除く文字列から,最初のn文字(m+1)~(m+n)
%I:~m,-n%m文字目以降から最後のn文字を除く文字列(m+1)~(X-n)
%I:~-m%最後のm文字(X-m+1)~X
%I:~-m,n%末尾よりm文字目からn文字(X-m+1)~(X-m+n)
%I:~m,-n%末尾よりm文字目以降から最後のn文字を除く文字列(X-m+1)~(X-n+1)

文頭への文字列付加

例:拡張子が".txt"である全ファイル名の文頭に文字列"prefix"を加える(abc.txt→prefixabc.txt)

for %%F in (*.txt) do ren "%%F" "prefix%%F"

末尾への文字列付加

例:拡張子が".txt"である全ファイル名の末尾に文字列"suffix"を加える(abc.txt→abcsuffix.txt)

for %%F in (*.txt) do ren "%%F" "%%~nFsuffix%%~xF"

応用例 (全て組み合わせる)

単に組み合わせるなら,上のコードを順に並べるだけです.ここでは,もう少し実用的な例を紹介します.


例:「1.フォルダを作成→2.作成フォルダにファイルをコピー→3.ファイル名を変更」
通常,バックアップを取ってからファイル名変更を行います.間違った処理をしてファイル名が意図しない名前に上書きされてしまうのを防ぐためです.というわけで,

  • 別なフォルダにコピーしてからファイル名を変更したい.
  • この時作成するフォルダ名は,自動でつけるが,絶対に他と被らない物が良い.

ことになります.この処理を実現するバッチファイルを次の記事で作成しました.
www.mynote-jp.com

参考記事

プライバシーポリシー

お問い合わせ