この記事では、ファイル名の一部を一括で変更または削除するバッチファイルを紹介します。
例えば、以下のようなことができます。
このバッチファイルは、この記事内のコードをメモ帳に貼り付けるだけで誰でも簡単に使えます。
大量のファイルの名前を一気に変更できるので便利です

バッチファイルの作成方法
このバッチファイルの作り方はシンプルです。
別の記事で紹介した「バッチファイルの作成方法」の手順3で、以下のコードをメモ帳に貼り付けるだけです。
@echo off
setlocal enabledelayedexpansion
:: V02L02
set "folder=%~dp0"
set /p "old_string=置換したい文字列を入力してください: "
set /p "new_string=新しい文字列を入力してください: "
:: 置換したい文字列が「-」で始まっているかチェック
if "!old_string:~0,1!"=="-" (
echo.
echo 置換したい文字列の先頭に「-」は指定できません。
echo 再度バッチファイルを実行してください。
echo.
pause
exit /b
)
:: 入力文字列のチェック
set "error=0"
call :checkForbiddenAll "!old_string!" "!new_string!"
if !errorlevel! equ 1 (
echo.
echo 入力された文字列に禁止文字が含まれているため処理を終了します。
echo 再度バッチファイルを実行してください。
echo.
pause
exit /b
)
:: 変更対象ファイルの数をカウントと対象ファイルの特定
set "changedFiles=0"
set "targetFiles="
for %%F in ("!folder!*.*") do (
:: バッチファイルの場合はスキップ
if /i not "%%~xF"==".bat" (
set "filename=%%~nF"
set "ext=%%~xF"
echo !filename! | findstr /L "!old_string!" >nul
if !errorlevel! equ 0 (
set /a changedFiles+=1
set "targetFiles=!targetFiles!"%%~nF"^|"%%~xF"^|"
)
)
)
:: 対象ファイルが存在しない場合は終了
if !changedFiles! equ 0 (
echo.
echo 指定された文字列を含むファイルが見つかりません。
echo.
pause
exit /b
)
:: 変更対象ファイルの一覧を表示
echo.
echo 以下のファイルの名前を変更します:
set "displayList=!targetFiles!"
:displayLoop
for /f "tokens=1,2* delims=|" %%a in ("!displayList!") do (
set "filename=%%a"
set "ext=%%b"
set "newname=!filename:%old_string%=%new_string%!"
set "filename=!filename:"=!"
set "newname=!newname:"=!"
set "ext=!ext:"=!"
:: 新しいファイル名が空になる場合はエラーメッセージを表示して終了
if "!newname!"=="" (
echo.
echo エラー:変換後のファイル名が空になってしまうため、処理を中止します。
echo 新しい文字列を指定し、再度実行してください。
echo.
pause
exit /b
)
echo 元の名前: !filename!!ext!
echo 新しい名前: !newname!!ext!
echo -------------------
set "displayList=%%c"
if not "!displayList!"=="" goto displayLoop
)
:: 続行確認
set /p "confirm=これらのファイルの名前を変更しますか? (Y/N): "
if /i "!confirm!" neq "Y" (
echo.
echo 処理を中止します。
echo.
pause
exit /b
)
:: ファイル名の変更処理
echo.
set "processList=!targetFiles!"
set "successCount=0"
:renameLoop
for /f "tokens=1,2* delims=|" %%a in ("!processList!") do (
set "filename=%%a"
set "ext=%%b"
set "filename=!filename:"=!"
set "newname=!filename:%old_string%=%new_string%!"
set "ext=!ext:"=!"
:: 新しいファイル名の禁止文字チェック
call :checkForbiddenAll "!newname!"
if !errorlevel! equ 1 (
echo.
echo 変換後のファイル名に禁止文字が含まれているため処理を中止します。
echo.
pause
exit /b
)
ren "!folder!!filename!!ext!" "!newname!!ext!" 2>nul
if !errorlevel! equ 0 (
echo "!filename!!ext!" を "!newname!!ext!" に変更しました。
set /a successCount+=1
) else (
echo "!filename!!ext!" の名前変更に失敗しました。
echo (重複するファイル名が存在するか、またはファイルが見つかりません)
)
set "processList=%%c"
if not "!processList!"=="" goto renameLoop
)
:: 処理完了メッセージの表示
echo.
echo 処理が終了しました!
echo 名前を変更したファイルの数: !successCount!
echo.
pause
exit /b
:checkForbiddenAll
set "str=%~1%~2"
set "chars=/:*?^""
:: |, <, > のチェック
for %%C in ("|" "<" ">") do (
set "str2=!str!"
if "!str2!" neq "!str2:%%~C=!" (
echo.
echo 禁止文字「^%%~C」が見つかりました。
exit /b 1
)
)
:: 通常の禁止文字チェック
for /L %%i in (0,1,5) do (
set "char=!chars:~%%i,1!"
if not "!char!"=="" (
echo !str! | findstr /C:"!char!" >nul && (
echo.
echo 禁止文字「!char!」が見つかりました。
exit /b 1
)
)
)
:: \のチェック
echo !str! | find "\" >nul && (
echo.
echo 禁止文字「\」が見つかりました。
exit /b 1
)
exit /b 0
バッチファイルの名前は何でもかまいません。
バッチファイルの使い方(基本編)
このバッチファイルは、以下の手順で使えます。
このバッチファイルを実行するとファイル名が一気に変更されます。念のため、事前にバックアップをとってください。
目的フォルダの中にバッチファイルを配置します
名前を変更したいファイルがあるフォルダの中にバッチファイルを配置します。
以下の例では、「テスト」フォルダの中にバッチファイルを置きました。

バッチファイルをダブルクリックします
最初に、目的のフォルダ内にバッチファイルを配置したことを確認してください。
意図しないフォルダ内でバッチファイルを実行すると、意図しないファイルの名前が変更されるので注意してください。
今回の例では、以下のイラストのフォルダにバッチファイルを配置しました。

今回の例では、上のイラストのフォルダ内の「人事部1.docx」、「人事部2.docx」の中の「人事」を「開発」に変更してみます。
処理を開始するには、上のイラストの状態で、バッチファイルをダブルクリックします。
バッチファイルをダブルクリックすると、以下のメッセージがでて、置換したい文字列を尋ねられます。

今回の例では、「人事」と入力しました。

上のイラストのように入力できたら、エンターキーを押します。
エンターキーを押すと、以下のイラストのように、新しい文字列を尋ねられます。

上のイラストの状態で、新しい文字列を入力します。

今回の例では、上のイラストのように、「開発」と入力しました。
この状態でエンターキーを押すと処理が始まり、以下のメッセージがでます。

内容を確認後に、よければ、上のイラストのように「y」と入力します(Yは大文字でも小文字でもかいません)
「y」と入力後にエンターキーを押すと処理が始まり、以下のようなメッセージがでます。

上のメッセージで、処理の内容と、変更されたファイルの数を確認できます。
実際のフォルダ内では、以下のイラストのように、2つのファイルの名前の一部が変更されています(「人事」→「開発」)。

以上で基本操作の説明は終わりです。
バッチファイルの使い方(応用編)
ここでは、上記の例以外のファイル名変更例を示します。
部分的な変更例
部分変更例の結果
以下のイラストのように、「部」→「部00」への変更によって、ファイル名末尾の連番が3桁になります。
変更前

変更後

部分的な削除例
削除例の結果
以下のイラストのように、ファイル名から「部」が削除されます。
部分削除前

部分削除後

この種の置換は、ファイル名から特定の文字列を除去したいときに便利です。
但し、変更後のファイル名が完全になくなる置換はエラーになります。
注意点
注意点1
ファイル名の変更は、ファイルの種類に関係なく(拡張子に関係なく)、フォルダの中のすべてのファイルに適用されます。
例えば、以下の条件でファイル名を変更をしたとします。
以下のイラストのように、ファイルの種類に関係なくファイル名が変更されます。
変更前

変更後

そのため、特定の種類のファイルのみの名前を変更したい場合は、名前を変更したくない種類のファイルをフォルダから出してからバッチファイルを実行してください。
注意点2
ファイル名の変更後と同じ名前のファイルが既に存在する場合、ファイル名の変更に失敗します。
例えば、以下のようなエラーメッセージが出て、ファイル名の変更がスキップされます。

注意点3
以下の文字は、ファイル名に使用できません(入力してもはじかれます)
\、/、:、*、?、"、<、>、|
その他の特徴
拡張子名は、変更/削除の対象にはなりません。
バッチファイル自体の名前は、変更/削除の対象になりません。
セキュリティソフトによって処理が遮断された場合
パソコンの環境によっては、セキュリティソフトによって処理が一時的に遮断され、以下のようなメッセージ(一例です)がでる場合があります。

このような場合は、「アプリを許可する」を選んでください。
(メッセージや、アプリの許可操作は、セキュリティソフトによって異なります)
その他の関連バッチファイル
以下のバッチファイルも併用すると、より柔軟なファイル名変更ができます

・ファイル名を一括で変更するバッチファイルはこちら
・ファイルの拡張子を一括で変更するバッチファイルはこちら
・ファイル名に作成日/更新日を一括追加するバッチファイルはこちら
・ファイルを種類ごとに自動でフォルダ分けするバッチファイルはこちら
・ファイル名の先頭/末尾の文字列を追加/削除するバッチファイルはこちら
・パソコンデータをミラーリングしてUSBメモリにバックアップするバッチファイルはこちら
是非使ってみてくださいね!
