• ベストアンサー

フォルダ名に番号を連番でつけたい

バッチファイルでフォルダを作る際に、 「今日の日付+連番」でフォルダを作成するバッチを 作りたいと考えています。 例えば、 20090911-01_○○○○ 20090911-02_△△△△ 20090911-03_□□□□ というフォルダがあった時、「20090911-04」 というフォルダが作成されるような動きで、 次にバッチを動かした場合には「20090911-05」というフォルダが 作成されるように、 「今日の日付+番号」の番号を+1ずつ足していくには どのように記述すればいいでしょうか。 ご存知の方がいましたら、教えてください。 よろしくお願いします。 OS:Windows2000、XP

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

VBScriptの例 Option Explicit 'コマンドラインパラメータをチェック If WScript.Arguments.Count = 0 Then 'パラメータ無しの場合 MsgBox "親フォルダ名を指定してください", _       vbCritical, "エラー" WScript.Quit 1 '終了コード=1 End If '変数の宣言 Dim FSO, FLD, OBJ, FNM, REG, TDY, MXN, TMP, TGF 'コマンドラインパラメータの1番目を取得 TGF = WScript.Arguments(0) '本日のYYYMMDDの編集 TDY = CStr(Year(Now) * 10000 + Month(Now) * 100 + Day(Now)) '正規表現オブジェクト Set REG = New RegExp REG.Global = True REG.Pattern = "^" & TDY & "_\d{2}" 'フォルダ名のパターン 'ファイル/フォルダ操作用のオブジェクト Set FSO = CreateObject("Scripting.FileSystemObject") Set FLD = FSO.GetFolder(TGF) MXN = 0 '連番最小値 For Each OBJ In FLD.SubFolders 'サブフォルダを順に処理   FNM = OBJ.Name 'フォルダ名を取得   If REG.Test(FNM) Then 'パターンに一致した場合     TMP = CLng(Mid(FNM, 10, 2)) 'YYYYMMDD_NN のNNを数値化     If TMP > MXN Then MXN = TMP '現在までの最大値なら記録   End If Next '最大値+1でフォルダを作成 TMP = CStr(MXN + 1) If Len(TMP) < 2 Then TMP = "0" & TMP If Right(TGF, 1) <> "\" Then TGF = TGF & "\" FSO.CreateFolder TGF & TDY & "_" & TMP WScript.Quit 0 '終了コード=0 上記を適当なエディタにコピペし、漢字全角を半角空白に変更します。 これは字下げに漢字空白を使っているためです。次に拡張子を.VBSで 保存(名前は任意)します。あとはコマンドラインから以下のように 打ち込めば実行します。 xxx.vbs C:\~ 尚、親フォルダを受け取るのにBrowseForFolder(フォルダを選択する ダイアログ)を使う方法もあります。ちょっと、バッチっぽくないか…

roin3821
質問者

お礼

ありがとうございます。 完全に自分が求めた動きです。 ***.vbsのファイルはどこに行っても見た覚えがあるので、 きっといろいろな場所で使えると思います。 本当にありがとうございました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

2桁限定でいいなら for /L (1,1,9) do if not exist %DATE:/=%-0%n (mkdir %DATE:/=%-0%n & goto :EOF) for /L (10,1,99) do if not exist %DATE:/=%-%n (mkdir %DATE:/=%-%n & goto :EOF) みたいにやれば何とかならんでもないかもしれない.

roin3821
質問者

お礼

回答ありがとうございました。 情けない話ですが、 Tacosanさんの例を参考にして自分で作ってみようとはしたのですが、 自分の頭ではどうにも限界なようです。 なんとなく、自分の知っている言語とは記述の仕方が違う様に 感じられ、なかなか理解できませんでした。 まずはfor文とif文の使い方から勉強していこうと思います。

回答No.2

バッチの中からスクリプトを 呼ぶのもある意味バッチ処理だと思うが。 dirとfor構文と環境変数を駆使すれば出来るかもわからんね。 スクリプトで書いたほうがスマートだと思うけど。

roin3821
質問者

お礼

dirで親フォルダに入っているもの一覧を作り、 FINDで今日の日付を検索して、 検索結果の件数に+1すればいいのかな? と思って一度作ってみました。 dir /b /ad 親フォルダ名 | find /c "%date:~0,4%%date:~5,2%%date:~8,2%" で件数は出たのですが、 どうやって+1すればいいのかな? という所で詰まりました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

バッチでは難しいような気がしますね。Scriptではダメですか? あと、このフォルダの親パスはどうやって決めるのですか? もう一つ、連番は数字2桁限定ですか(100以上にならない)?

roin3821
質問者

お礼

バッチでは難しいですかね・・・ Scriptがよく解らないのと、 バッチなら特に環境を気にせずに使えるかなぁと思いまして。 親パスは set OYAPATH = ○○\△△\□□ mkdir %OYAPATH%\%date:~0,4%%date:~5,2%%date:~8,2% のように作ればいろいろな場所で使えるかなぁと思っています。 連番は多くても30までです。

関連するQ&A

専門家に質問してみよう