初めてバッチファイルを作った話
仕事で大量のデータ取り込みのテストを行うに当たって100個のファイルが必要になり、地道に手動でテストデータ入りのファイルをコピペすると1日かかりますし、腱鞘炎になってしまう!
何とか一瞬で100個のファイルをコピー出来る手段は無いのか・・・と調べると、バッチファイルを作って自動でコピー出来ることが判明!
「バッチファイル・・・難しそうだけどやってみるか!」と思い、さっそく作成しました。
作成したバッチファイルの概要
1.編集で指定した数の分だけファイルをコピーする
2.コピーされた際、0埋めされた番号が採番されること
作成したバッチファイルの中身
ネットで調べながら以下のバッチファイルが完成致しました。
setlocal enabledelayedexpansion
for /l %%n in (2,1,10) do (
set num=00%%n
echo !num:~-3!
copy C:\Users\Public\TEST\test_001_20191226.txt C:\Users\Public\TEST\test_!num:~-3!_20191226.txt
)
endlocal
pause
中身の解説
setlocal enabledelayedexpansion
:
ローカル変数を使う場合に宣言する時に使うコマンド
これを使うことで、バッチ実行中に変数の値を変化させることが出来ます。
for /l %%n in (2,1,10) do
:
「for」は繰り返し処理をさせるコマンド。
「/l」は後ろの(開始の番号,増分,終了の番号)を有効にさせるコマンドです。
「%%n」は格納する変数です。
この場合は「2から1ずつ採番し、10になったら終了」という意味になります。
set num=00%%n
:
echo !num:~-3!
ここでは上記の変数の左2桁を0で埋めたものを「num」という変数にセットしました。
これだけだと10以降に差し掛かった時「0010」となってしまう為、「num」の右2桁を読み込む処理を追加しました。
「!」で囲まれているのは「遅延環境変数」にさせる為です。
バッチファイルの特徴として、「設定した条件に差し掛かった時、以後全ての変数を展開させる」というものがあります。
これだと初めに格納した値でしか処理されないです。
その為、後のタイミングで展開させたい時に使うのが「遅延環境変数」です。
上記のsetlocal enabledelayedexpansion
を最初に宣言し、展開するタイミングをずらしたい変数を「!」で囲みます。
copy C:\Users\Public\TEST\test_001_20191226.txt C:\Users\Public\TEST\test_!num:~-3!_20191226.txt
:
)
「copy」はファイルをコピーさせるコマンドです。
copy コピー元のファイル名 コピーされるファイル名
という構文で使います。
endlocal
:
最初に宣言した「setlocal」の範囲を締めるコマンド。
pause
:
処理が全て完了した後自動でコマンドプロンプトが消えず、手動で終了させるコマンド。
「終了する時は何かキーを押して下さい」と表示させるのはこれ。
実際に動かしてみた
↓フォルダを確認すると、「010」まで採番されたファイルが作成されていることを確認
まとめ
以上より、ファイルを大量にコピーさせるバッチファイルを作成致しました。
0埋めの連番処理で少々詰まってしまいましたが、思った以上に簡単に作ることが出来ました。
今回作ったものをきっかけに、業務効率化を図るのに自分でバッチファイルを作る選択肢が増え、普段の業務をよりスムーズに出来るようにさせていきたいと思います。
2020年7月10日 追記
久しぶりにバッチファイルを動かそうとしたら、ファイル名に「()」が含まれていることが原因で動かすことが出来ませんでした。
ファイル名から「()」を取り除いたら正常に動くことは出来ましたが、「()」や「「|」が含まれているファイルに対しては現在調査中ですが、これらの記号をファイル名に含ませることはタブーに近いことみたいですね。
参考文献
バッチファイルでファイル名に連番を付けてコピーする~実行解説
SE日記 windowsコマンドで連番付きのファイルを一気に大量に作る/コピーする方法
Lyo.blog バッチファイルで前ゼロ付き連番ファイル生成
Author And Source
この問題について(初めてバッチファイルを作った話), 我々は、より多くの情報をここで見つけました https://qiita.com/youth_case/items/d9d0bb1ef64fae74a0f3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .