バッチ処理、頻繁に使わないので、構文毎回忘れるんです
毎回同じような疑問とミスがあるよね~
業務で大量の連番フォルダを作成する必要がありましたので、バッチを作成した備忘録になります。これをベースに改造していけば、いろいろなパターンの連続的な採番バッチができて、意外と便利かも、しれません。(バッチの基本を学んでいない初心者の記事になります)
※自分用のため、入力データについては、自明なので、エラー処理などの記述はしていない旨、ご了承ください。
こんな人の役に立つかも
・windowsのバッチを組みたい人
・バッチプログラムでフォルダを採番したい人
・特殊な連続採番を行いたい人
ベースにしたプログラム
かなりどんぴしゃのプログラムサンプルがあり、これを改造して次のようなプログラムを作成しました。
https://nw-engineer.work/mkdirbat/
本当に、このサイトのプログラムで7割完成してしまいました 笑
ありがたや
改造したプログラム
今回は、自分の用途に最適化するために、いくつかの改造を施しました。
次のスクショは動作している画面です。4つの質問に入力していくことで5桁ゼロで埋められた連続する数値の名称のフォルダを作成することができます。
例えば、上の入力例で、先頭に付加する文字列「saisyo」、作成するフォルダ数5、作成する開始番号10として、最後に付加する文字列を「(テスト用)」とすると、以下のように連番のフォルダがバッチファイルと同じ階層に作成されます。
プログラムは次のようになりました。
このプログラムをメモ帳などに貼り付け、拡張子を「〇〇.bat」(ファイル名は任意です)として実行できます。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
ECHO 必要な項目を設定してください
SET /P PREFIX= 先頭に付加する文字列を入力:
SET /P NUM= 作成するフォルダの個数を入力:
SET /P COUNT= 作成する開始番号を入力:
SET /P POSTFIX= 最後に付加する文字列の入力:
SET PAD=5
SET /a NUM = %NUM% + %COUNT%
:LOOP
IF %COUNT% GEQ %NUM% (
GOTO EXITLOOP
)
SET FOLDER=0000000000%COUNT%
SET FOLDER=%PREFIX%!FOLDER:~-%PAD%!
SET FOLDERNAME=%FOLDER%%POSTFIX%
MKDIR %FOLDERNAME%
SET /A COUNT+=1
GOTO LOOP
:EXITLOOP
改良点
スタート番号を指定する
整理番号的な番号を採番する必要がありましたので、指定したスタート番号から連続する数値を入力できるように変更しています。
フォルダ番号の最後に任意の文字列を付加する
任意の文字列をフォルダの最後に付加したかったので、「POSTFIX」という変数を新たに準備して、フォルダ名の最後に付け加えました。
フォルダ作成個数について
スタート番号から入力個数を合わせるため、IFの条件を「GTR」(より大きい)から「GEQ」(以上)に変更しました。
バッチファイルのIF文の条件もなんだか慣れないです・・・
バッチの技術的メモ
今回のバッチを作成するために調べた技術的な部分を備忘録しています。
入力を受け付ける
「SET /P」とすることで入力待ち状態になります。
SET /P PREFIX= 先頭に付加する文字列を入力:
数値を計算する
「SET /A」とすることで格納した数値の計算を行うことができます。
SET /a NUM= %NUM% + %COUNT%
変数を%で囲むことを忘れないようにするのがポイントです。
文字列を結合する
次のように、変数をそのまま並べることで文字列を連結することができました。
SET FOLDERNAME= %FOLDER%%POSTFIX%
注意事項
今回一番はまったのが、=の左にスペースを空けては動作しなかった点です。バッチの基本的事項なのかもしれませんが、基本を学んでいない自分にとって、一番はまったポイントになりました。変数POSTFIXをオリジナルで追加したとき、次のようにPOSTFIXの後ろにスペースをひとつ入れていたので、正常に動作しませんでした。/aでの文字列の結合のところでも同様のミスをしていて、文字列結合できないな~としばらく悩んでいました。
SET /P POSTFIX = 最後に付加する文字列の入力:
微妙な違いなのですが、
POSTFIX=
と、変数の右のスペースに気を付けてプログラムを作成していきたいと思います。
意外な落とし穴・・・