ファイルのリネームをユーザーの指定した様々なルールで実行する。

ユーザー作成のバッチファイルを実行することでファイルのリネームを様々なルールで行います。

元のファイル(引数%1)と保存先フォルダ(引数%2)を使いつつ、様々なルールでファイル名を変更して移動するバッチファイルの複数のサンプルです。

これらのサンプルは、ベースとなるエラー処理などは共通化し、ファイル名を決定する部分だけを入れ替えて使用します。

以下のコードをテキストエディタ(メモ帳など)にコピーし、例えば copy_and_rename.bat のような名前で読み書き可能なフォルダーに保存します。ファイルの文字コードは ANSI  を推奨します。

作成したバッチファイル(copy_and_rename.bat) は「クラウド対応自動印刷」の「設定」→「プリンター/処理」→「.Batchファイルを実行する」→「詳細」で選択します。 → 参考サイト


## ベースとなるバッチファイル (リネーム処理部分をカスタマイズ)

まずは共通となる基本構造です。この中の「rem --- 新しいファイル名をここで設定 ---」の部分を、後述する各パターンのコードに置き換えることで、様々なリネームを実現できます。エラーは error.log に記録されます。

【基本構造】 copy_and_rename.bat

@echo off
setlocal enabledelayedexpansion

rem --- 引数チェック ---

echo "%~1"
echo "%~2"

if "%2"=="" (
    set "errmsg=エラー: 引数が不足しています。元のファイルと保存先フォルダを指定してください。"
    goto :error_handler
)
if not exist "%1" (
    set "errmsg=エラー: 元のファイルが見つかりません。 PATH: "%1""
    goto :error_handler
)

rem --- 元のファイルパスから、ファイル名と拡張子を抽出 ---
set "original_filename=%~n1"
set "original_extension=%~x1"

rem -----------------------------------------------------------------
rem --- ▼▼▼ ここからリネームルール ▼▼▼ ---
rem
rem  ここに後述する各パターンのコードを挿入します。
rem  (例: ファイル名の先頭に日付を追加)
set "yy=%date:~0,4%"
set "mm=%date:~5,2%"
set "dd=%date:~8,2%"
set "new_filename=%yy%%mm%%dd%_!original_filename!"
rem
rem --- ▲▲▲ ここまでリネームルール ▲▲▲ ---
rem -----------------------------------------------------------------


rem --- ファイルをコピー&リネーム ---
set "new_filepath=%2\!new_filename!!original_extension!"
echo.
echo  元のファイル: "%1"
echo  新しいファイル: "!new_filepath!"
echo.

copy "%1" "!new_filepath!" > nul 2>> "%2\error.log"

rem --- 処理結果を判定 ---
if %errorlevel% equ 0 (
    echo 正常に処理が完了しました。
) else (
    echo エラーが発生しました。詳細は "%2\error.log" を確認してください。
)

goto :eof

:error_handler
rem --- エラー発生時の処理 ---
echo %date% %time% %errmsg% >> error.log
echo %errmsg%

goto :eof


ターミナル(コマンドウインドウ)でのテスト実行方法: move_and_rename.bat "元のファイル" "保存先フォルダ"


### リネームルールのサンプルパターン

上記の基本構造の「▼▼▼ ここからリネームルール ▼▼▼」の部分に、以下のコードブロックを挿入して使用してください。


1. ファイル名の先頭に現在の日付 (YYYYMMDD) を追加

例: report.txt20250911_report.txt

rem --- 新しいファイル名をここで設定 (日付接頭辞) ---
set "yy=%date:~0,4%"
set "mm=%date:~5,2%"
set "dd=%date:~8,2%"
set "new_filename=%yy%%mm%%dd%_!original_filename!"

2. ファイル名の末尾に現在の日付 (YYYYMMDD) を追加

例: report.txtreport_20250911.txt

DOS

rem --- 新しいファイル名をここで設定 (日付接尾辞) ---
set "yy=%date:~0,4%"
set "mm=%date:~5,2%"
set "dd=%date:~8,2%"
set "new_filename=!original_filename!_%yy%%mm%%dd%"

💡 ヒント: set "today=%date:/=%" とすると日付の/を削除できるので、set "new_filename=!original_filename!_%today%" のようにシンプルに書くこともできます。


3. ファイル名に含まれる特定の文字列を置換

例: sales_report_old.xlsxsales_report_new.xlsx

rem --- 新しいファイル名をここで設定 (文字列置換) ---
set "old_str=old"
set "new_str=new"
set "new_filename=!original_filename:%old_str%=%new_str%!"
  • **old_strnew_str**の値を自由に変更してください。

4. 拡張子を変更する

例: document.txtdocument.bak このパターンのみ、基本構造のリネームルール部分ファイル移動部分の両方を変更する必要があります。

▼リネームルール部分

rem --- 新しいファイル名をここで設定 (拡張子変更) ---
set "new_filename=!original_filename!"
set "new_extension=.bak"
  • **new_extension**の値を好きな拡張子(ドット . を含む)に変更してください。

▼ファイル移動部分 基本構造のset "new_filepath=..."の行を以下のように変更します。

set "new_filepath=%~2\!new_filename!!new_extension!"

5. ファイル名を完全に新しい名前に変更 (固定)

例: anyfile.ziparchive_data.zip

rem --- 新しいファイル名をここで設定 (固定名) ---
set "new_filename=archive_data"
  • **archive_data**の部分を好きなファイル名に変更してください。拡張子は元のまま引き継がれます。

6. ファイル名の先頭に連番を振る (フォルダ内のファイル数から計算)

例: photo.jpgimagesフォルダへ移動 → imagesフォルダに既に3つのファイルがあれば 004_photo.jpg にリネーム

rem --- 新しいファイル名をここで設定 (連番) ---
rem 移動先フォルダ内のファイル数を数える
set count=0
for %%f in ("%~2\*") do (
    set /a count+=1
)
set /a count+=1

rem 3桁のゼロ埋め
set "num=000!count!"
set "num=!num:~-3!"
set "new_filename=!num!_!original_filename!"


これらのサンプルを組み合わせることで、さらに複雑なリネーム処理も可能です。