たくさんのフォルダを作らなければならない場合、いちいち手作業でひとつずつ作っていくのは結構しんどいです。あらかじめフォルダ名がわかっているのなら、フォルダ名をテキストファイルでリストアップしておき、バッチファイルで一発で作れればとても楽チンです。
テキストファイルにフォルダ名をリストアップしておく
フォルダ名をテキストファイルにリストアップしておきます。後ほど解説しますが、リストを列挙したテキストファイルの名前には半角スペースを使用しないでください。今回は list.txt としました。文字コードは Shift-JIS、改行コードは CR+LF です。
テキストファイル内に空白行があった場合には無視されます。
バッチファイルを作成
テキストエディタなどでバッチファイルを作成し、次のようなソースコードを記述して先ほどの list.txt と同じフォルダに保存します。文字コードは Shift-JIS、改行コードは CR+LF です。ファイル名は makefolders.bat としました。
1 | for /f %%a in (%1) do md %%a |
for構文
for文とは「ループ」を行うコマンドです。C言語や JAVA などでプログラミングをした経験がある人であればお馴染みだと思いますが、使い方が少し特殊なので慣れないと違和感を感じるかもしれません。
書式は以下のようになります。
1 | for (オプション) %%アルファベット1文字 in (ループ処理の対象) do コマンド |
オプションとして使えるものは以下のとおり。
- オプション無なし:ディレクトリ内が対象
- /d:フォルダ名が対象
- /r:フォルダ名およびそのサブフォルダ内のファイル名やフォルダ名すべてが対象
- /l:値を指定して代入する
- /f:テキストファイル内の文章をトークンとして取り出して代入する
/f オプション
今回は /f オプションを使っていますが、その場合にはトークンオプションというものも指定することができます。
1 | for /f "トークンオプション" %%%アルファベット1文字 in (処理の対象) do コマンド |
トークンオプションとして使えるものは以下のとおり。
- tokens:何番目のトークンを指定するか?
- delims:トークンの区切り文字を指定
- eol:この文字から始まる行を無視
- skip:先頭から指定された行数、スキップする。
- usebackq:コマンドの出力を対象にする
例えば、次のような hogehoge.txt というテキストファイルがあったとします。
1 2 | 1,2,3,4,5 a,b,c,d,e |
これに対して、次のようなバッチファイルを実行すると、
1 | for /f "tokens=1,3 delims=:," %%i in (hogehoge.txt) do echo %%i %%j |
このようになります。
これは hogehoge.txt から一行ずつ読み込み、トークンの区切り文字である「,」で区切った後、1番目と3番目をトークンとして echo で表示する、という動作を行っています。デフォルトのトークン区切り文字は、半角スペースかタブです。
%1
%1 はバッチファイルに指定された第一引数を表しています。コマンドプロンプトでは実行の際に引数を指定することが可能です。例えば、次のように引数を指定したとしましょう。複数の引数を指定する場合、半角スペースで区切る必要があります。
1 | >test.bat udon soba pasta |
ここで、それぞれの引数を画面に表示するためのバッチファイルは、次のように記述することができます。
1 2 3 4 5 6 7 8 | @echo off echo %1 echo %2 echo %3 echo: cmd /K |
先ほど、フォルダ名をリストアップしたテキストファイルは半角スペースを入れてはいけないと言いましたが、これはコマンドプロンプトが半角スペースによって複数の引数を指定されたと解釈してしまうためです。
「なんでバッチファイルの引数の話をしているの?」と疑問に思われたかもしれませんが、後ほどリストアップしたテキストファイルをどのように使うのかがわかれば、すぐに理解できると思います。
do md %%a
md は「mkdir」の略で、mkdir 〇〇〇 でフォルダを作成することができます。
今回、簡略化して一行でソースコードを記述していますが、次のように記述しても同じ動作になります。
1 2 3 | for /f %%a in (%1) do ( md %%a ) |
フォルダを一発で作成
それではリストアップしたテキストファイルを使って、フォルダを一発で作成してみましょう。list.txt を makefolders.bat にドラッグ&ドロップするだけです。
これはコマンドプロンプトで次のように入力して実行したのと同じことです。
1 | >makefolders.bat list.txt |
リストアップしたテキストファイルに半角スペースを使用できないのはこれが理由です。
大量のフォルダが作成されたことを確認してください。
おまけ
フォルダ名の一覧をテキストファイルに保存する方法は次のようになります。コマンドプロンプトの cd コマンドを使って一覧を作りたいフォルダにカレントディレクトリを変更し、次のように入力・実行します。
1 | >dir /b /ad > list.txt |
「dir /b /ad」でカレントディレクトリのフォルダ一覧を表示、実行結果をリダイレクトコマンド(>)を使って list.txt に保存しています。
フォルダ名一覧をテキストファイルにリストアップするとき、このテキストファイルをごにょごにょすれば手間が省けるのではないでしょうか。ご活用ください。
Comment