今回ご紹介するのは、フォルダを自動でコピーして入れ替える小さなプログラムです。
単純な作業代用プログラムですが、皆様の業務にも応用できるかもしれませんのでぜひ読んでいただき、実際に作ってみてください♪
専門のソフトや特別な環境設定は要りません。Windowsパソコン であれば、メモ帳アプリひとつでプログラムが作れてしまいます👏
(Macユーザーの方は今回はごめんなさい)
まずは作るプログラムについて考えてみましょう!
大枠でいうと、このプログラムは 「AというフォルダをBというフォルダにコピーする」 という単純な作業です。📁→📁
しかし、実用的に使えるプログラム にするとなると、考慮すべき想定はたくさんあります。
たとえば、
コピー元フォルダが存在しなかった場合はどうするか?
コピー先に古いデータがある場合はどう残すか?データを上書きしていいのか?
うっかりマウスクリックで実行しないように、安全策はどうするか?
など、さまざまな状況が考えられますね。
そういった状況を考慮して、今回のプログラムの仕様を考えてみます。
①コピー元のフォルダが無い場合は、コマンドプロンプト画面に「フォルダが見つかりません」と表示させて、処理を行わない。
→処理状況は画面でわかるようにする。
②コピー先にある古いフォルダは日付付きで名前を変えて残す。
→ 「昨日の分」「今日の分」と履歴もわかるようにする。
③コピー先にあるフォルダの名前を自動で変換してコピー元のフォルダを置き換える。
→ 手作業でリネームしたりコピー&ペーストする必要なし。
④間違えて実行しないように、パスワード入力のステップをはさむ!
→ 誤ってダブルクリックをしても、正しい文字を入れないと動かないので安心。
さて、ここで「フォルダ名に日付をつけるのはいいけど、同じ日に何回も保存することはできるの?」
という疑問が生まれますね。
仕様を追加しましょう。
⑤同じ日に何度も処理する場合、フォルダ名に日付に加えて連番を付ける。
→ 同じ日に実行した回数分、データコピー、追加できます。
こうした “もし○○だったらどうするか” を設計に組み込むことで、安心して使える自動化プログラムになります。
実際のコードはこちら👇
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: -------------------------------
:: パスワード認証
:: -------------------------------
set /p password=パスワードを入力してください:
if not "%password%"=="0123" (
echo パスワードが違います。処理を中止します。
pause
goto end
)
:: -------------------------------
:: 変数初期化
:: -------------------------------
set renamed=0
:: 日付を取得 (YYYYMMDD)
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value ^| find "="') do set datestamp=%%I
set datestamp=%datestamp:~0,8%
:: コピー先フォルダ
set DEST=E:\kumamoto\DATA
:: -------------------------------
:: ① DATAフォルダをリネーム(日付+連番)
:: -------------------------------
if exist "%DEST%" (
set num=1
:checkfolder
if exist "E:\kumamoto\DATA_%datestamp%_!num!" (
set /a num+=1
goto checkfolder
)
ren "%DEST%" "DATA_%datestamp%_!num!"
echo %DEST% を DATA_%datestamp%_!num! にリネームしました。
set renamed=1
) else (
echo 実行中・・・
)
:: -------------------------------
:: ② Backup\DATA をコピー
:: -------------------------------
if exist E:\HOZONDATA (
:: コピー先が存在しなければ作成
if not exist "%DEST%" (
mkdir "%DEST%"
)
xcopy /E /I /H /Y E:\HOZONDATA "%DEST%"
echo E:\HOZONDATA を %DEST% にコピーしました。
) else (
echo E:\HOZONDATA フォルダが見つかりません。
:: リネームを元に戻す処理
if %renamed%==1 (
ren "E:\kumamoto\DATA_%datestamp%_!num!" DATA
echo E:\kumamoto\DATA_%datestamp%_!num! を元の名前 DATA に戻しました。
)
)
echo 処理が完了しました。
pause
:end
exit /b
👆このコードをそのままメモ帳にコピーして「backup.bat」という名前で保存すると使えます。
※フォルダパスやコードはご自身の環境に合わせて変更してください。
例:コピー先:E:\kumamoto\DATA コピー元:Z:\HOZONDATA
※使用するときには必ずテストをしてください。大事なデータはバックアップし、プログラムコード内のパスに誤りが無いか確認して試してみてください。(意図しない同名データの保存や置き換えに注意⚠)
使い方の流れ
1.メモ帳にコードを貼り付ける
2.ファイル名を「backup.bat」として保存する(拡張子を.batにするのがポイント)
3.保存したファイルをダブルクリックで実行
4.「パスワードを入力してください」と出るので、コード中の ”0123”の部分に設定した文字を入力。
(上記コードでは例としてパスワード0123になっていますが、別の文字に修正することで入力パスワードは変更できます)
5.コピーが実行されます!👍
まとめ
このプログラムのポイントは「安心して繰り返し使える」ことです。
日付と連番付きで過去データを残す
コピー元のフォルダが無いときは 処理を行わない
パスワードで誤操作防止
単純なコピー作業でも、設計を考えておくことで毎日の作業がぐっと楽になります。
IT自動化は難しく聞こえますが、小さな改善から始めるのがおすすめです。
ぜひみなさんも、作って試してみてください!
関連Q&A
Q1. 「.bat」に拡張子を変える方法が分かりません。
A. 保存する時に「ファイルの種類」を「すべてのファイル」にして、ファイル名を backup.bat と入力してください。
拡張子が表示されない場合は、エクスプローラーで「表示」→「ファイル拡張子」にチェックを入れると見えるようになります。
Q2. コピー元やコピー先のフォルダの「パス」ってどうやって調べるの?
A. コピーしたいフォルダを右クリック →「プロパティ」を開くと「場所」にパスが表示されます。
または、フォルダをエクスプローラーで開いて、アドレスバーをクリックするとパスをコピーできます。
Q3. 実行したら「フォルダが見つかりません」と出て止まってしまいます。
A. コード内のパス(例:E:\kumamoto\DATA や Z:\HOZONDATA)が実際に存在するか確認してください。
ドライブ文字(C:, D:, E: など)が違っている場合もよくあるので注意しましょう。
Q4. パスワードを忘れたらどうすればいいですか?
A. コードの中に書かれている 0123 の部分がパスワードです。任意に変更できるので、ご自身で分かりやすい数字や文字列に書き換えてください。