👏

バッチファイルで一括フォルダ作成

2021/09/26に公開

はじめに

同ディレクトリ内に一括でフォルダを作成するバッチファイルの紹介です。

準備

テキストファイルにフォルダ名を記載します。改行区切りでlist.txtファイルにこのように記載されているものとします。
フォルダー1
フォルダー2
フォルダー3
Folder 1
Folder 2
Folder 3

バッチファイル作成

バッチファイルはこう書いてみました。

@echo off

for /f %%a in (%1) do (
	md %%a
)

先程のテキストファイルをこのバッチファイルにドラッグアンドドロップします。
結果は以下のようになります。

Folder
フォルダー1
フォルダー2
フォルダー3

「フォルダー1」「フォルダー2」「フォルダー3」は期待どおり作成されていますが、「Folder 1」Folder 2」「Folder 3」はできていません。さらに「Folder」が1つできています。これは期待した結果ではありませんね。
リストをよく見てみると、「Folder」と「1」の間に半角スペースが入っています。うまくいかない原因はここにありそうです。
テキストファイルに記載したフォルダ名に半角スペースが入っているとうまくいかないことがわかりました。半角スペースはコマンド引数の区切りに使われるため、意図した挙動にするにはここを何とかする必要がありそうです。
では、これを回避するためにバッチファイルを改良します。

@echo off

for /f "delims=" %%a in (%1) do (
	md "%%a"
)

先ほどとの違いは、"delims="とダブルクォーテーションで囲った"%%a"です。
バッチファイルがテキストを読み込むときのトークンはデフォルトで半角スペースなので、そこは変更していません。"delims="とすることで半角スペース区切りを無くし、行ごとにフォルダ名を扱うようにしています。あとは、md コマンドの引数となるループ変数%%aをダブルクォーテーションで囲って"%%a"とすることで、半角スペースの入ったフォルダ名を作成できます。

ワンライナー

一行で書くことも可能です。

> for /f "delims=" %a in (list.txt) do md "%a"

まとめ

かんたんで役に立つ(?)バッチファイルの紹介でした。

Discussion