今回の10行プログラムは、img01, img02, img03…、または01img, 02img, 03img…などと連番フォルダを作成してくれるWindowsコマンドプロンプト上で動作するバッチファイルです。
フォルダ名は、接頭文字列+番号で作成されます。(ちなみに逆に 番号+末尾文字列 としたフォルダ名で作成したい場合、最後に紹介しています)
例えば、
mkdir_n img 1 10
として実行すると、冒頭画像のような img01~img10までのフォルダが10個生成されます。
Windowsでは、拡張子が~.batとしてテキストファイルを作成すると、バッチファイルとしてコマンドラインから実行ができます。~.batのファイルは、ダブルクリックでも実行できますが、今回は実行時に引数(上記でいえば、img 1 10などの文字列を伴うため、コマンドプロンプトなどから文字列入力して最後にEnterキーを押して実行するようにしてください)
10行プログラム
以下の名前でメモ帳などでバッチファイルを作成してください。
ファイル名が、そのまま今回の実行プログラム名となります。(拡張子は省略できるので、mkdir_nで実行できます)
ファイル名 mkdir_n.bat
:: --- 接頭文字列と範囲を指定して連番フォルダを作成する
@echo off
set zero=0
set count=0
for /L %%i in (%2,1,%3) do (
if %%i LSS 10 ( mkdir %1%zero%%%i
) else mkdir %1%%i
set /a count=count+1
)
echo 接頭文字列%1でフォルダを%count%個作成しました
実際の実行イメージ(コマンドプロンプト上で実行)
実行した場所にフォルダが作成されるので注意してください。
もし、以下のように「指定されたファイルが見つかりません。」と沢山表示されてフォルダが生成されないようならWindows側の問題ですので、次項目を参考にしてください。
Windows11で「承認されていない変更がブロックされました」とメッセージが表示される場合
Windows11の場合、実行ファイルに対してのセキュリティが厳しくなったため、コマンド実行するフォルダの位置によってはウインドウ右下に「承認されていない変更がブロックされました」とのメッセージが出る可能性があります。
その際は、通知文字列部分をクリックする。(右下の表示が消えてしまった場合は、通知領域に表示されています)
保護の履歴が開くので、表示されている日時をチェックしてクリックする。
このアプリがデバイスに変更を加えることを許可しますか? と聞いてくるので、「はい」を選択。
操作をクリックするとデバイスで許可のメニューが表示されるのでクリックする。
再度、このアプリがデバイスに変更を加えることを許可しますか? と聞いてくるので、「はい」を選択。(けっこうしつこい!)
この操作で、次回以降このフォルダでは、コマンド実行ができるようになります。
10行プログラムにコメントをつけて分かりやすくしたもの
mkdir_n.bat(コメント有りバージョン)
:: --- 接頭文字列と範囲を指定して連番フォルダを作成する
@echo off
:: 変数に値を代入する(zero: フォルダ名10未満用, count: 作成したフォルダ数カウント用)
set zero=0
set count=0
:: 変数iは引数2(%2)から始まり1ずつ増やして引数3(%3)まで繰り返す
for /L %%i in (%2,1,%3) do (
:: もし変数iが10未満なら(判定処理)
if %%i LSS 10 (
:: フォルダ名の頭に「0」をつけてフォルダ作成
mkdir %1%zero%%%i
) else (
:: 10以上ならフォルダ名はそのままで作成
mkdir %1%%i
)
:: 変数countを+1する
set /a count=count+1
)
:: フォルダ生成後にメッセージを表示する
echo 接頭文字列%1でフォルダを%count%個作成しました
1行ずつ解説
10行で何をしているか知りたい方は、参考にしてください。
1行目
:: --- 接頭文字列と範囲を指定して連番フォルダを作成する
コメントです。何もしていません。
2行目
@echo off
今回のようなバッチファイルは、実行コマンドをそのままコマンドプロンプト上に表示してしまうため、バッチファイル実行時に表示がすっきりさせるために入れています。
@echo offを入れると、最後のechoコマンド以外は実行コマンドを画面に表示させないようにする記述です。(試しにこの行を外してみると分かります)
3~4行目
set zero=0 set count=0
変数zeroと変数countを定義しています。
zero:フォルダ名の最後につける連番の数値が1桁の場合、img1とせずにimg01と2桁するため「0」という文字を付加するために利用しています。変数zeroの値はずっと0のままです。
count:5行目から繰り返し処理を使って連番フォルダを生成しているのですが、フォルダを何個生成したか?を記憶するために利用します。初期値は0です。
5~9行目
for /L %%i in (%2,1,%3) do ( if %%i LSS 10 ( mkdir %1%zero%%%i ) else mkdir %1%%i set /a count=count+1 )
繰り返し処理(いわゆるfor文)です。5行目→6→7→8→9→5→6….9行目と繰り返します。
前置きとして、コマンドプロンプト上で%1 %2 %3は、それぞれコマンドライン引数を表します。
例えば、mkdir_n img 1 10 として実行した場合、%1にimg、%2に1、%3に10がそれぞれ代入されます。
これを使って変数i(%%i)の値を変化させます。
くり返しの構文は、
for /L カウント用変数名 in (初期値,増分,終了値)do ( くり返し処理 )
となります。%2に1、%3に10が入っていた場合、in (1,1,10)となり、変数iの値は、1から1ずつ増やして10までという意味になります。
6行目はフォルダ名に付加する数値が1桁の場合の分岐処理(if文)です。
1桁の場合、img01, img02…のように0を数値につけるので、変数iの値が10未満のとき(if %%i LSS 10)にフォルダを生成(mkdir %1%zero%%%i)しています。mkdirのあとの%1はコマンドライン引数の1番目の文字列です。%zero%は、変数zeroの値(すなわち0)、%%iは変数iの値です。
例として、変数iの値が1で、mkdir_n img 1 10 とした場合、mkdir img01を実行することになります。mkdirはコマンドプロンプト命令で引数に指定したフォルダを作成する命令です。
7行目は、変数iが10未満ではない時(すなわち10以上の時)の実行命令です。
変数iが10以上なら2桁以上となるので0をつけずにmkdir img10などと実行することになります。
8行目の set /a count=count+1 は、変数countに1を加算しています。要するにフォルダを1つ生成したらcountの値を1足して変数countに生成したフォルダの数を入れておくということです。
9行目の)は5行目の(と対になっています。この( )の中身が繰り返しを行う処理です。
10行目
echo 接頭文字列%1でフォルダを%count%個作成しました
最後にメッセージを出力してプログラムを終えます。
%1はコマンドライン引数1番目、%count%の部分に変数countの値が入ります。
先頭を連番数値にして末尾文字を指定してフォルダ生成するには?
例えば、01img, 02img, 03img…のような先頭に番号付きのフォルダを生成したい場合、バッチファイルのmkdirを実行している行にある%1を末尾にもってくれば先頭が数値になります。
イメージ
バッチファイル例を以下に示します。
mkdir_n.bat(先頭が数値版)
:: --- 末尾文字列と範囲を指定して連番フォルダを作成する @echo off set zero=0 set count=0 for /L %%i in (%2,1,%3) do ( if %%i LSS 10 ( mkdir %zero%%%i%1 ) else mkdir %%i%1 set /a count=count+1 ) echo 末尾文字列%1でフォルダを%count%個作成しました
実行コマンド例
mkdir_ns img 1 10
実行イメージ
以上、10行で連番フォルダを作るバッチファイルでした!
コメント