【PR】 バッチファイル

ファイル名の先頭/末尾の文字列を追加/削除するバッチファイル【図解】

2025-03-04

アイキャッチ画像

この記事では、ファイル名の先頭または末尾の文字列を一括で追加または削除するバッチファイルを紹介します。

例えば、以下のような変更を一括で行うことが可能です。

ファイル名の変更例

・ファイル名の末尾に文字列を追加

 「人事部.docx」、「総務部.docx」→「人事部(秘).docx」と「総務部(秘).docx」

・ファイル名の末尾から文字列を削除

 「人事部(秘).docx」と「総務部(秘).docx」→「人事部.docx」、「総務部.docx」

・ファイル名の先頭に文字列を追加

 「人事部.docx」と「総務部.docx」→「人事部.docx」、「総務部.docx」

・ファイル名の先頭の文字列を削除

 「人事部.docx」と「総務部.docx」→「人事部.docx」、「総務部.docx」

このバッチファイルは、この記事内のコードをメモ帳に貼り付けるだけで誰でも簡単に使えます。

大量のファイルの名前を一気に変更できるので便利です

陰キャくじら
陰キャくじら

類似のバッチフィルとして、ファイル名の一部を一括で変更/削除するバッチファイルも紹介していますので、併せてご覧ください。

バッチファイルの作成方法

このバッチファイルの作り方はシンプルです。

別の記事で紹介した「バッチファイルの作成方法」の手順3で、以下のコードをメモ帳に貼り付けるだけです。

@echo off
setlocal enabledelayedexpansion

:: V01L01

set "folder=%~dp0"

:: 追加か削除かを選択
:operation_select
echo 実行する操作を選択してください:
echo 1: ファイル名に文字列を追加
echo 2: ファイル名から文字列を削除
set /p "operation=選択(1 または 2): "
if "!operation!" neq "1" if "!operation!" neq "2" (
    echo 1または2を入力してください。
    goto operation_select
)

:: 先頭か末尾かを選択
if "!operation!"=="1" (
    :: 文字列追加の処理
    call :add_position_select
) else (
    :: 文字列削除の処理
    call :delete_position_select
)

:: 文字列の長さを計算
set "len=0"
for /L %%i in (0,1,100) do (
    if "!target_string:~%%i,1!" neq "" set /a "len+=1"
)

:: 入力文字列のチェック
call :checkForbiddenAll "!target_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"
        
        if "!operation!"=="2" (
            :: 削除モードの場合、対象文字列を含むファイルのみを処理
            if "!position!"=="1" (
                :: 先頭一致の確認
                set "check_start=!filename:~0,%len%!"
                if "!check_start!"=="!target_string!" (
                    set "match=yes"
                ) else (
                    set "match=no"
                )
            ) else (
                :: 末尾一致の確認
                set "check_end=!filename:~-%len%!"
                if "!check_end!"=="!target_string!" (
                    set "match=yes"
                ) else (
                    set "match=no"
                )
            )
            if "!match!"=="yes" (
                set /a changedFiles+=1
                set "targetFiles=!targetFiles!"%%~nF"^|"%%~xF"^|"
            )
        ) else (
            :: 追加モードの場合、すべてのファイルを処理
            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 "filename=!filename:"=!"
    set "ext=!ext:"=!"
    
    if "!operation!"=="1" (
        :: 追加モード
        if "!position!"=="1" (
            set "newname=!target_string!!filename!"
        ) else (
            set "newname=!filename!!target_string!"
        )
    ) else (
        :: 削除モード
        if "!position!"=="1" (
            if "!filename:~0,%len%!"=="!target_string!" (
                set "newname=!filename:*%target_string%=!"
            ) else (
                set "newname=!filename!"
            )
        ) else (
            set "newname=!filename:~0,-%len%!"
        )
    )

    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 "ext=!ext:"=!"
    
    if "!operation!"=="1" (
        :: 追加モード
        if "!position!"=="1" (
            set "newname=!target_string!!filename!"
        ) else (
            set "newname=!filename!!target_string!"
        )
    ) else (
        :: 削除モード
        if "!position!"=="1" (
            if "!filename:~0,%len%!"=="!target_string!" (
                set "newname=!filename:*%target_string%=!"
            ) else (
                set "newname=!filename!"
            )
        ) else (
            set "newname=!filename:~0,-%len%!"
        )
    )
    
    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

:: サブルーチン:追加位置の選択
:add_position_select
:add_position_loop
set /p "position=文字列を追加する位置を選択してください(1:先頭 / 2:末尾): "
if "!position!" neq "1" if "!position!" neq "2" (
    echo 1または2を入力してください。
    goto add_position_loop
)
set /p "target_string=追加する文字列を入力してください: "
exit /b

:: サブルーチン:削除位置の選択
:delete_position_select
:delete_position_loop
set /p "position=削除する文字列の位置を選択してください(1:先頭 / 2:末尾): "
if "!position!" neq "1" if "!position!" neq "2" (
    echo 1または2を入力してください。
    goto delete_position_loop
)
set /p "target_string=削除する文字列を入力してください: "
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

バッチファイルの名前は何でもかまいません。

バッチファイルの使い方

このバッチファイルを実行するとファイル名が一気に変更されます。念のため、事前にバックアップをとってください

このバッチファイルは、以下の手順で使えます。

目的フォルダの中にバッチファイルを配置します

名前を変更したいファイルがあるフォルダの中にバッチファイルを配置します。

以下の例では、「テスト」フォルダの中にバッチファイルを置きました。

ファイル名を変更したいファイルがあるフォルダの中にバッチファイルを配置した様子

バッチファイルをダブルクリックします

最初に、目的のフォルダ内にバッチファイルを配置したことを確認してください。

意図しないフォルダ内でバッチファイルを実行すると、意図しないファイルの名前が変更されるので注意してください。

今回の例では、以下のイラストのフォルダの中にバッチファイルを配置しました。

ファイル名を変更したいファイルがあるフォルダの中にバッチファイルを配置した様子

今回の例では、上のイラスト中のすべてのファイルの名前の末尾に「(秘)」を追加してみます。

処理を開始するには、上のイラストの状態で、バッチファイルをダブルクリックします。

バッチファイルをダブルクリックすると、以下のメッセージが出て、実行する操作追加 or 削除)を選択できます。

操作の種類を尋ねている状態(追加 or 削除)

今回は、ファイル名の末尾に「(秘)」を追加するので、1(半角)を入力してエンターキーを押します。

エンターキーを押すと、以下のメッセージが出て、文字列を追加する位置(1:先頭 / 2:末尾)を選べます。

文字列を追加する位置を尋ねている状態

今回は、ファイルの末尾に「(秘)」を追加するので、2(半角)を入力してエンターキーを押します。

エンターキーを押すと、以下のメッセージが出て、追加する文字列を入力できます。

追加する文字列を尋ねてている状態

今回は、ファイルの末尾に「(秘)」を追加するので、(秘)を入力してエンターキーを押します。

エンターキーを押すと、以下のメッセージが出て、変更内容を確認できます

変更内容がよければ、Y(半角)を入力してください(中止したい場合は、Nを入力してください)。

処理を実行してよいか尋ねている状態

エンターキーを押すと、以下のメッセージが出て、処理の結果が確認できます

名前が変更されたファイルの数も確認できます。

処理が終了し、処理内容が表示されている状態

実際のフォルダ内では、以下のように、ファイルの種類を問わず、ファイル名の末尾に「(秘)」が追加されます。

以上で操作の説明は終わりです。

上記の例では、ファイル名の末尾に「(秘)」を追加しましたが、これを削除することもできます。

以下は、ファイル名の末尾から「(秘)」を削除した結果です。

ファイル名の末尾から「(秘)」を削除した結果

フォルダ内は、以下のようになります(ファイル名の末尾から()が削除されています)。

フォルダ内のファイルの名前の末尾から(秘)が削除された状態

上記の例では、ファイル名の末尾を追加/削除対象にしましたが、ファイル名の先頭文字列の追加/削除対象にすることもできます。

以下の例は、ファイル名の先頭に「」を追加した結果です。

ファイル名の先頭に「★」を追加した結果

フォルダ内は、以下のようになります(ファイル名の先頭追加されています)。

フォルダ内のファイルの名前の先頭に★が追加された状態

注意点

注意点1

ファイル名の変更は、ファイルの種類に関係なく(拡張子に関係なく)、フォルダの中のすべてのファイルに適用されます。

注意点2

ファイル名の変更後と同じ名前のファイルが既に存在する場合、ファイル名の変更に失敗します(そのファイルの処理はスキップされます)。

注意点3

以下の文字は、ファイル名に使用できません(入力してもはじかれます)

\、/、:、*、?、"、<、>、|

セキュリティソフトによって処理が遮断された場合

パソコンの環境によっては、セキュリティソフトによって処理が一時的に遮断され、以下のようなメッセージ(一例です)がでる場合があります。

セキュリティソフトによってバッチファイルの処理が遮断された場合に出るメッセージの例

このような場合は、「アプリを許可する」を選んでください。

(メッセージや、アプリの許可操作は、セキュリティソフトによって異なります)

その他の関連バッチファイル

以下のバッチファイルも併用すると、より柔軟なファイル名変更ができます

陰キャくじら
陰キャくじら

ファイル名を一括で変更するバッチファイルこちら

ファイルの拡張子を一括で変更するバッチファイルこちら

ファイル名の一部を一括で変更/削除するバッチファイルこちら

ファイル名に作成日/更新日を一括追加するバッチファイルこちら

ファイルを種類ごとに自動でフォルダ分けするバッチファイルこちら

パソコンデータをミラーリングしてUSBメモリにバックアップするバッチファイルこちら

【スポンサーリンク】

-バッチファイル
-, ,