プロが教えるわが家の防犯対策術!

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

OS:Windows2000、XP

A 回答 (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(フォルダを選択する
ダイアログ)を使う方法もあります。ちょっと、バッチっぽくないか…
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました。

お礼日時:2009/09/14 22:59

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)
みたいにやれば何とかならんでもないかもしれない.
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/09/14 22:51

バッチの中からスクリプトを


呼ぶのもある意味バッチ処理だと思うが。

dirとfor構文と環境変数を駆使すれば出来るかもわからんね。
スクリプトで書いたほうがスマートだと思うけど。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/12 05:54

バッチでは難しいような気がしますね。

Scriptではダメですか?
あと、このフォルダの親パスはどうやって決めるのですか?
もう一つ、連番は数字2桁限定ですか(100以上にならない)?
    • good
    • 0
この回答へのお礼

バッチでは難しいですかね・・・
Scriptがよく解らないのと、
バッチなら特に環境を気にせずに使えるかなぁと思いまして。

親パスは
set OYAPATH = ○○\△△\□□
mkdir %OYAPATH%\%date:~0,4%%date:~5,2%%date:~8,2%
のように作ればいろいろな場所で使えるかなぁと思っています。

連番は多くても30までです。

お礼日時:2009/09/12 05:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!