今回は指定したディレクトリにファイルをコピーするバッチについて紹介します。
作成したファイルをバックアップしたい
しかし、ファイル数が多すぎて「コピー」「ペースト」は面倒だと感じたことがあるかと
思います。
そんなときに役に立つバッチを紹介します。
コピー元のファイルが格納されている「業務」フォルダ内の、「20190619」「20190620」の中には
以下のファイルが存在しています
この「20190619進捗報告書」及び「20190620進捗報告書」をコピーあらかじめ用意していた「bk」というフォルダ内にファイルを作成し、そこへコピーしていきます。
実際のコマンドは以下の通りです。
set base_dir=C:\Users\thiruma\Desktop\bk\
set today=%date:~0,4%%date:~5,2%
set bk_dir=%base_dir%バックアップ_%today%
mkdir %bk_dir%
cd C:\Users\thiruma\Desktop\作業\
dir /s /b *.xlsx>> test.txt
for /f "delims=" %%a in (test.txt) do (
cd %bese_dir%
copy %%a %bk_dir%
cd C:\Users\thiruma\Desktop\作業\
)
上から順に説明します。
1段落目の事前処理では、メインの処理を行うにあたって前提となる情報や、何度か出てくる処理を文字に置き換える処理を行っていきます
set base_dir=C:\Users\thiruma\Desktop\bk\
「base_dir」を指定していきます。
今回は上記のパスが「base_dir」となります。
set today=%date:~0,4%%date:~5,2%
「today」を「date」で出した値から6文字目(dateで20190621呼び出して、頭から4桁分、5文字目から2桁分)抽出します。
set bk_dir=%base_dir%バックアップ_%today%
フォルダ作成時の格納先のフォルダについて詳細に決めていきます。
今回は「base_dir」内に「バックアップ_today」名でフォルダを作成する設定にします。
mkdir %bk_dir%
実際に「bk_dir」で設定したフォルダを作成します。
cd C:\Users\thiruma\Desktop\作業\
dir /s /b *.xlsx>> test.txt
「作業」フォルダ内に移動し、サブディレクトリ内のファイルを出力し、「test.txt」にファイル名を入力します。
for /f "delims=" %%a in (test.txt) do (
cd %bese_dir%
copy %%a %bk_dir%
cd C:\Users\thiruma\Desktop\作業\
)
・「test.txt」内の中身を1行ずつ読み込む
・「base_dir」に移動
・%%a(test.txtで一行ずつ読み込んだ内容)を「bk_dir」にコピーする
・「作業」フォルダに移動する
という繰り返し作業を「test.txt」の中身を読み終えるまで実行する。
という流れになります。
以上をバッチで実行すると
「test.txt」が作成されその中身も「20190619進捗報告書」及び「20190620進捗報告書」のファイル名が書き出されているのが確認できました。
「bk」フォルダ内も確認してみると
「バックアップ_today」で指定したフォルダが作成され、「20190619進捗報告書」及び「20190620進捗報告書」のファイルがコピーされていることが確認できました。
今回はファイルのバックアップに役立つバッチについて紹介させていただきました。
同じような動きのバッチでも作る人によって様々な形があると思うので、「自分だったらこう作る!」というのがあればコメントお待ちしております。