VBSで簡単業務改善。新規フォルダー一括作成ツールのご紹介。

リラックマ ぱそこん

おはようございます。
くまおです。

本日のテーマは業務効率化。
誰でも簡単に作成できるVBSのツールのご紹介です。

くまお
くまお

Windows環境であれば誰でも簡単にプログラム体験できるので試してみてください。

スポンサーリンク

VBSとは

Visual Basic Scriptの頭文字を取った略称で、Windowsに標準搭載されている簡易プログラミング言語です。メモ帳だけでも作成可能で、拡張子を「.vbs」にして保存後、ファイルをダブルクリックするだけで簡単に実行することが出来ます。

こぐまくん
こぐまくん

これなら誰でもお手軽に始めることが出来そうだね!

今回はフォルダーを簡単に一括作成するプログラムを作成してみました。年末年始のフォルダー整理や、案件開始時のフォルダー作成に、尋常ではない数の『右クリック⇒新規作成⇒フォルダー』をされている方に強くお勧めです。

こぐまくん
こぐまくん

複数のフォルダーを作成するだけなら簡単だけど、各フォルダーの下にさらにフォルダーを作成する時がとても大変なんだよね。

なおフォルダーの新規作成はショートカット『Ctrl+Shift+n』もあるので活用してみましょう。新規作成『Ctrl+n』と混同しやすいので注意が必要ですね。Windows標準のショートカットは便利なモノが多いので積極的に活用して、私デキマス感を演出していきましょう。笑

こぐまくん
こぐまくん

コピー『Ctrl+c』とペースト『Ctrl+v』はお手の物ダヨ!

フォルダー一括作成ツール簡易版

'フォルダー名記載 ※vbsファイル配置フォルダーに作成(絶対パスの指定可能)
dim fName(5)
fName(1)="01.test01"
fName(2)="02.test02"
fName(3)="03.test03"
fName(4)="03.test03\01.test01"
fName(5)="03.test03\02.test02"

'オブジェクト生成 ※ファイル操作するためのおまじない
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'変数に展開できたフォルダーのみ作成
for i = 1 to 5
  'フォルダー作成
  objFSO.CreateFolder(fName(i))
next
'オブジェクト開放
Set objFSO = nothing

fName(1) ~ (5)の右辺を、作成したいフォルダー名 に変更して保存後、ダブルクリックをすれば終了です。エラー判定は実施していない簡易版のため、作成に失敗した場合は、それ以降のフォルダーは作成されません。親ディレクトリが存在しない、既にフォルダーが存在しているなど、事前に確認した上で実行いただけますと幸いです。相対パスで指定した場合は、VBSファイルと同じフォルダーに新規フォルダーが作成されます。適宜ファイルの配置場所を変更して実行してみてください。

'フォルダー名記載 ※vbsファイル配置フォルダーに作成(絶対パスの指定可能)
dim fName(5)
fName(1)="01.test01"
fName(2)="02.test02"
fName(3)="03.test03"
fName(4)="03.test03\01.test01"
fName(5)="03.test03\02.test02"

'オブジェクト生成 ※ファイル操作するためのおまじない
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'変数に展開できたフォルダーのみ作成
for i = 1 to 5
  'フォルダー作成
  objFSO.CreateFolder(fName(i))
next
'オブジェクト開放
Set objFSO = nothing
VBS実行イメージ
こぐまくん
こぐまくん

フォルダ配下にも作成されるのは便利で嬉しいんだよ!

フォルダー一括作成ツールチェック追加汎用版

フォルダーの存在チェックや、親フォルダーの有無を事前にチェックしてSKIPする場合はすこしだけ複雑になります。

'使用方法
'編集箇所を作成するフォルダー件数とフォルダー名に修正後、保存してファイルをダブルクリック
'注意点
'親フォルダーが存在しない場合、作成をSKIPするため親フォルダーから順に記載

'-- 以下編集箇所 --

'作成するフォルダー件数(※最大99件)
dim fCount : fCount = 10
'フォルダー名記載 ※vbsファイル配置フォルダーに作成(絶対パスの指定可能)
fName01="01.test01"
fName02="02.test02"
fName03="03.test03"
fName04="04.test04"
fName05="05.test05"
fName06="05.test05\test06"
fName07="05.test05\test07"
fName08="05.test05\test07\test08"
fName09="05.test05\test07\test09"
fName10="05.test05\test07\test10"

'-- 以下編集不要 --

'変数宣言
dim fName()
redim fName(fCount)
'有効フォルダー件数初期化
tCount = 0
'内部変数に展開
for i = 0 to fCount -1
  if i < 9 then
    tName=eval("fName0"&i+1)
  else
    tName=eval("fName"&i+1)
  end if
  if len(tName) > 0 then
    fName(tCount)=tName
    tCount=tCount+1
  end if
next
'オブジェクト生成 ※ファイル操作するためのおまじない
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
'変数に展開できたフォルダーのみ作成
for i = 0 to tCount-1
  'フラグ初期化
  flg = 0
  'フォルダー存在チェック ※存在しない場合のみ作成
  if false=objFSO.Folderexists(fName(i)) then
    '親フォルダー存在チェック ※存在しない場合はSKIP
    if instrrev(fName(i),"\") = 0 then
      flg = 1
    else
      if true=objFSO.Folderexists(left(fName(i),instrrev(fName(i),"\")-1)) then
        flg = 1
      end if
    end if
    if flg = 1 then
      'フォルダー作成
      objFSO.CreateFolder(fName(i))
    end if
  end if
next
'オブジェクト開放
Set objFSO = nothing

プログラムの基本になるIFFORが使われていて雰囲気が出てきましたね。使用している関数について順番に解説していきます。

ツール解説

使用関数命令文一覧
  • eval(式)
    式を評価して返された結果は、変数として扱われるため、変数名を動的に使用することが可能です。定義の変数名の末尾がインクリメントされているような場合に有効ですね。
  • if 条件 then 処理 end if
    条件に合致した場合のみ処理を実行します。プログラムを書くには避けて通ることのできない命令文ですね。
  • for i=x to y 処理 next
    初期値xからyまで、処理を繰り返し実行します。IF文同様頻出の命令文ですね。
  • left(文字列,数値)
    文字列を先頭から指定した桁数だけ取得します。
  • inStrRev(文字列,検索文字列)
    検索したい文字列を後方から検索して、その文字の先頭からの桁数を返します。今回はleftの桁数指定に使用して、\の位置を特定しています。

作成するフォルダーを別ファイルに記載して、VBSで読み込む方がスマートな気もしますが、また別の機会にご紹介させていただくとします。

くまお
くまお

何か気になる点があれば、ご指摘ご質問いただけますと励みになります。

如何でしたか。フォルダー一括で作成したくてうずうずしてきましたか?
皆様の日常に欠片でもプラスになれば幸いです。

それではまた。

コメント