Windowsで複数のフォルダやファイルを連番で作成する方法



普段のパソコン作業の中で複数のフォルダやファイルを名前を付けながら作成するとなると、それが20、30とある場合は若干面倒くさい作業ですよね。また連番みたいな規則性がある大量のフォルダやファイルを作ることもあるでしょう。

ここではWindows PCでそんな面倒くさい作業を簡単に実装する方法をご紹介します。
今回は、複数のフォルダやファイルを連番で作成する方法をご説明します。
一般の方はあまり見慣れない方法ですが、「バッチファイル」というものを作成して実装します。

なんだか難しそうに思えますが、ちょっと触れれば慣れてきます。
また、一度作ってしまえば使い回すことができるので最初に頑張るだけです。

バッチファイルとは、あらかじめ複数のバッチ(バッチコマンド)が記述されたファイルを用意しておいて、バッチファイルを実行することでファイル内に記述したコマンドを実行することができるファイル。
Windowsのメモ帳などでもファイルを作成でき、文字コードは「ANSI」か「Shift-JIS」形式で拡張子を「.bat」として保存します。「UTF-8」などにすると文字化けします。

では早速、複数のフォルダやファイルを連番で作成するバッチファイルを作っていきましょう。

バッチファイルの作成


まずはフォルダから。
ファイル名は自分のわかりやすい名前で大丈夫です。
ここでは「createfolders」とします。

createfolders.bat

@echo off
  
set /p foldername="フォルダ名を入力:"
set /p number="フォルダ数を入力:"
  
setlocal enabledelayedexpansion
  
for /l %%i in (1,1,%number%) do (
  set num=0%%i
  set num=!num:~-2,2!
  mkdir %foldername%!num!
)
  
endlocal
Windowsで複数の連番フォルダを作成するバッチファイル



記述内容を説明します。

一番最初の行の「@echo off」は実行中のコマンド列を画面に表示させない定型コマンド。
バッチファイルの作成中でデバッグのために必要ないときはいらないが完成したファイルであれば画面表示が邪魔なので基本的に「@echo off」は記述する。

setコマンドで「/p」オプションを使ってユーザーからの入力情報の取得するようにします。
そのあとに環境変数名を設定し「=」のあとのダブルクォーテーション「””」で囲われた中に文字列を入れてユーザーに入力を促すプロンプトを表示します。
setのあとに/pオプションがない場合は、ただ右辺の文字列を左辺の変数に代入する意味になります。

setコマンドで「foldername」と「number」の変数にユーザーが入力した値が格納されます。

setlocal enabledelayedexpansion」は遅延環境変数を扱う時に宣言するもので、if文やfor文で変数の値が変わる場合がある時に設定される。
これはif文やfor文の処理とその中の処理のタイミングが同時なので変数の値が変わらなくなるバグが発生するわけです。
プログラムの実行中に変数の値を変化させたい時には「setlocal enabledelayedexpansion」を宣言します。

forコマンドでは「/l」オプションで値を指定して代入する。
「%%i」のように「%%」とアルファベット一文字の「i」で変数を表します。「%%i」が変数となります。
「in」のあとに対象の値を入れます。値の括弧内は(開始値,増分,終了値)となります。
1から始まり1ずつ値が増える、終了値は「%number%」でユーザーが入力したフォルダ数が変数として展開します。
変数の展開は「%%」で囲う、また遅延環境変数を宣言している場合は「!!」で囲う。

「do」のあとの角括弧内「{}」に処理を書いていきます。

forコマンドの処理の中では、
はじめに変数numに「%%i」の値を入れて頭に0をつけて01、02…14、15のような桁表示になるよう「set num=0%%i」とします。

2つ目のsetで変数numを値を調整するために右辺の値を代入して変更します。
「!num:~-2,2!」は変数numからは後ろから数えて2文字から2文字切り取るといった内容です。
なぜこれをするかというと、1の前に0をつけると01となりますが、15の前に0をつけると015となります。01の2文字は問題ないですが015の3文字を調整するために後ろから数えて2文字から2文字抜き取り15とするためです。

あとはmkdirコマンドで変数foldernameと変数numの値を使ってフォルダを数分作成します。
変数numはforコマンドで定義された遅延環境変数になるので展開は「!!」で囲います。

最後のendlocalは、setlocalからendlocalまでの範囲で定義した変数がその中だけで有効になるので、その他では影響しないことになります。
要するにローカル変数ですね。

このような内容のコマンドとなっています。

続いて、複数のファイルを連番で作成するバッチファイルも作りましょう。
ファイル名は「createfiles」とします。
こちらも同じような感じでユーザーの入力した値を使ってファイルを作成するプログラムとなっています。
 

createfiles.bat

@echo off
  
set /p filename="ファイル名を入力:"
set /p extension="拡張子を入力:"
set /p number="ファイル数を入力:"
  
setlocal enabledelayedexpansion
  
for /l %%i in (1,1,%number%) do (
  set num=0%%i
  set num=!num:~-2,2!
  type nul > %filename%!num!.!extension!
)
  
endlocal



複数ファイルを作成するバッチファイルの中に見慣れないプログラム「type nul >」があります。
こちらはテキストファイルの中身を表示させるときに使う「typeコマンド」を利用して「nul」することで「null(何もない)」で、中身が空のファイルを作成していきます。
「> (出力リダイレクト)」で左側のコマンドの出力を右側で指定した内容にするということです。
その右側には変数を展開してファイル名と形式を指定するわけです。

今回作成したバッチファイル(createfolder.bat、createfile.bat)は一度作ってしまえば使い回せますので、ドキュメントフォルダにでも保存してあとでいつでもコピーして使えるように管理しておいくと良いでしょう。

Windowsで複数のフォルダやファイルを作成するバッチファイル



準備が出来たところで早速、複数のフォルダやファイルを作成してみましょう。

複数の連番フォルダを作成


例としてデスクトップに「作業フォルダ」という名前のフォルダを作成して、その中で複数のフォルダを作っていきます。
作業フォルダの中に先程作成した複数のフォルダを作成するプログラムが記述してあるバッチファイル「createfolder.bat」を置きます。

Windowsで複数の連番フォルダを作成01



ここでcreatefolder.batをダブルクリックしてバッチファイルを実行します。
実行するとフォルダ名とフォルダ数の入力を求められます。
作成するフォルダ名と必要なフォルダ数をそれぞれ入力してEnterキーを押します。

Windowsで複数の連番フォルダを作成02



作業フォルダの中を確認すると、指定したフォルダ名で指定したフォルダ数の数だけ連番で作成されているのが確認できます。

Windowsで複数の連番フォルダを作成03



連番で複数のフォルダが作成できましたし、バッチファイル(createfolder.bat)は必要ないので削除してください。
特に置いておく必要はないです。

複数の連番ファイルを作成


連番ファイルの作成もフォルダと一緒です。
作成したバッチファイルを実行して作成していきます。

連番ファイルを作成するバッチファイル(createfile.bat)を作業フォルダにコピーして持ってきます。

Windowsで複数の連番ファイルを作成01



バッチファイルをダブルクリックで実行します。
実行するとファイル名とファイル形式の拡張子、ファイル数の入力を求められるので各項目で入力してEnterキーを押していきます。

Windowsで複数の連番ファイルを作成02



完了して作業フォルダを確認すると、指定したファイル名と形式で指定した数だけ連番でファイルが作成されているのが確認できます。

Windowsで複数の連番ファイルを作成03



こちらもファイル作成後はバッチファイル(createfile.bat)は必要ないので削除してください。

各フォルダに各番号ファイルを作成


ここまでは連番の複数フォルダやファイルを作成することができるバッチファイルを作りましたが、各番号のフォルダに各番号のファイルを入れたディレクトリ構造を構築したいと思うところです。

各番号のフォルダに各番号のファイルを入れたディレクトリ構造



ですのでちょっとだけ複雑なバッチファイルを作成してみます。

ファイル名は「createdir」とでもしておきましょうか。
setコマンドで設定するユーザーの入力は4つ、フォルダ名とファイル名は少し変える場合もあるのでそれそれを指定。
フォルダとファイルの数は一緒にするので一つにまとめました。
あとはファイルの拡張子の指定と、この4つの値を使って作成していきます。

createdir.bat

@echo off
 
set /p foldername="フォルダ名を入力:"
set /p filename="ファイル名を入力:"
set /p number="フォルダやファイルの数を入力:"
set /p extension="ファイルの拡張子を入力:"
 
setlocal enabledelayedexpansion
 
for /l %%i in (1,1,%number%) do (
  for /l %%k in (1,1,1) do (
    set num=0%%i
    set num=!num:~-2,2!
    mkdir %foldername%!num!
    type nul > %foldername%!num!\%filename%!num!.!extension!
  )
)
 
endlocal



ちょっとだけ複雑になるところがforコマンドの入れ子処理でしょうか。
外側のforコマンドは変数を「%%i」としてフォルダやファイルの数だけ繰り返します。
中側のforコマンドでは変数を「%%k」として「(開始値,増分,終了値)」を「(1,1,1)」とすることで2回目の処理は増分で1増えて終了値を超えるため処理されない。一度だけ処理をするということです。
外側のforコマンドで増えていく変数「%%i」の値を使って、1つずつフォルダを作ってファイルを作ってという処理をしています。
「type nul」部分では、「\」を使って各フォルダの下の階層にファイルを作成するようにしています。

これで連番の各フォルダの中に各番号のファイルを作成することができます。

forコマンドの入れ子処理を初めて見る方はちょっとわかりづらいと思ってしまいますが、書いて動かしているとそのうちに慣れてきます。

まとめ


Windowsではこのようにコマンドが記述されたバッチファイルを作成しておいて、必要な時に必要な場所で実行するだけで簡単に複数の連番フォルダやファイルを作成することができます。
バッチファイルは一度作っておいて保管しておけばコピーして使い回せますので楽ですね。

ファイル名の出力方法を変えたい時などは、頑張って自分でバッチファイルをカスタマイズしてあげる必要はありますが、ここではプログラムの説明も載せてあるので大丈夫かと思います。

Macユーザーの方は以下の記事で、Mac OSのターミナルでUNIXコマンドを使った複数のフォルダやファイルを作成する方法をご紹介しています。