0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイルをバージョン別にバックアップするだけのバッチ

Last updated at Posted at 2025-03-25

ファイルをバックアップするだけのバッチです。

ファイルをバックアップする時って、どうしてますか?
バージョンとか、リビジョンとか付けて、同じフォルダか別フォルダに保存してます?

自分はバッチを社内で公開してるのですが、更新する際は、「今動いているバッチをまずバックアップフォルダにバックアップしておいて、最新版をリリースする。」という事をしてます。

その際、過去のバージョンも残しておきたいので、バックアップフォルダー上では、ファイル名にバッチの作成日時を追加してます。

例えば、
A.bat の作成日時 2025/3/25 9:15だった場合
バックアップフォルダにコピーした後、ファイル名を
A_20250325_0915.bat
に変更するという事をしてます。

これって地味に面倒なので、バッチにしました。

使い方

使い方は、バッチをダブルクリックしても表示されます。

バックアップしたいファイルをこのバッチに、ドラッグ&ドロップしてください。
上記の事を行います。
なお、日時まで同じファイルは、上書きは問題ないと思うので上書き確認はせず上書きします。
また、フォルダをサポートすると、思いがけず、めっちゃ大きなバックアップを作ってしまう可能性があるので、あえてフォルダのバックアップはサポートしてません。

元々、自分で作ったバッチファイルのバックアップで使うために作成しましたが、もちろんドキュメントファイルでも利用できます。

コード

突貫で作成したので、よく使う不要なコードも消してないし、洗練されてませんが、とりあえず動くので、この時点で公開します。
バージョンアップなどにも対応できるよう、サーバに本体を入れておいて、ショートカットを作成し、プロパティーから作業フォルダを%temp%に書き換えて、そのショートカットをみんなに配るのが良いと思います。
もちろん、ローカルで動作させたい場合、バッチ本体をローカルにおいても問題なく動きます。

make_backup.bat
@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%

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?