ファイルをバックアップするだけのバッチです。
ファイルをバックアップする時って、どうしてますか?
バージョンとか、リビジョンとか付けて、同じフォルダか別フォルダに保存してます?
自分はバッチを社内で公開してるのですが、更新する際は、「今動いているバッチをまずバックアップフォルダにバックアップしておいて、最新版をリリースする。」という事をしてます。
その際、過去のバージョンも残しておきたいので、バックアップフォルダー上では、ファイル名にバッチの作成日時を追加してます。
例えば、
A.bat の作成日時 2025/3/25 9:15だった場合
バックアップフォルダにコピーした後、ファイル名を
A_20250325_0915.bat
に変更するという事をしてます。
これって地味に面倒なので、バッチにしました。
使い方
使い方は、バッチをダブルクリックしても表示されます。
バックアップしたいファイルをこのバッチに、ドラッグ&ドロップしてください。
上記の事を行います。
なお、日時まで同じファイルは、上書きは問題ないと思うので上書き確認はせず上書きします。
また、フォルダをサポートすると、思いがけず、めっちゃ大きなバックアップを作ってしまう可能性があるので、あえてフォルダのバックアップはサポートしてません。
元々、自分で作ったバッチファイルのバックアップで使うために作成しましたが、もちろんドキュメントファイルでも利用できます。
コード
突貫で作成したので、よく使う不要なコードも消してないし、洗練されてませんが、とりあえず動くので、この時点で公開します。
バージョンアップなどにも対応できるよう、サーバに本体を入れておいて、ショートカットを作成し、プロパティーから作業フォルダを%temp%に書き換えて、そのショートカットをみんなに配るのが良いと思います。
もちろん、ローカルで動作させたい場合、バッチ本体をローカルにおいても問題なく動きます。
@echo off
chcp 932 >nul
rem setlocal enabledelayedexpansion
setlocal
if not '%1'=='' goto :start
:usage
echo ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
echo ■これは、ファイルのバックアップを簡単に作成するためのバッチです。
echo ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
echo このバッチにバックアップしたいファイルをドラッグ&ドロップすると、
echo ファイルと同じフォルダに「Back_up」というフォルダを作成して、そこに、ファイルの日付を付けたバックアップを作成します。
echo.
echo 例えば、Aというフォルダに2025/3/25 12:25に作成したB.txtというファイルがある場合、
echo Bのアイコンを、このバッチにドラッグ&ドロップしてください。
echo 1.Aフォルダに「Back_up」というフォルダを作成します。
echo 2.そのフォルダに、「B_20250325_1225.txt」という名前でファイルをコピーします。
echo.
echo すでに同名のファイルがあった場合上書きしますが、タイムスタンプも同じはずなので問題ないと思います。
echo フォルダーのバックアップは、想定以上の容量を必要とする可能性があるため、あえて対応していません。
echo.
goto :end_2
:start
if '%1'=='' goto end
set "file_full_path=%~1"
set "file_name=%~n1"
set "file_ext=%~x1"
set "file_dir=%~dp1"
set "file_date=%~t1"
rem 以下はファイル名に使用できない文字などを置き換えてます。
set "file_date=%file_date:/=%"
set "file_date=%file_date::=%"
set "file_date=%file_date: =_%"
rem パラメータはサブルーチン内で使いませんが、ループで引き継ぐために、付加してます。
call :make_backup %1
shift
goto :start
rem ============================================================================
:make_backup
set backup_dir=%file_dir%back_up\
set backup_file=%backup_dir%\%file_name%_%file_date%%file_ext%
if not exist "%backup_dir%" (
echo make directory
md "%backup_dir%"
)
copy /v "%file_full_path%" "%backup_file%"
exit /b
rem ============================================================================
:end
echo %backup_dir%にバックアップしました。
:end_2
endlocal
pause
exit /b %err_code%
以上