- ベストアンサー
フォルダーの自動生成
Windowsで、毎月1日になったら特定フォルダー内に前月の「年月」名フォルダーを自動的に作成することは、VBSやタスクスケジュールなどを組み合わせて可能でしょうか?。 例えば、20年8月1日になったら、Cドライブの「test01」フォルダーと「test02」フォルダー内に「2007」フォルダーを作成したいのですが。 \C\test01\2007 \C\test02\2007 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
みなVBSで難しく考えているようですがbatで十分でしょう。 [1日の時先月フォルダ作るよー.bat] echo off rem もしも1日ならば処理をするそうでない場合終了する if %date:~-2,2%==01 goto mkdirsystem exit :mkdirsystem rem 現在の年を確定(和暦)。西暦にしたい場合は「set y=%date:~-10,4%」とする。 set /a y=%date:~-10,4%-1988 rem 現在の月を確定 set m=%date:~-5,2% rem もしも1月だったら112、そうでない場合月の頭に1をつけ1引く(8進数対策) if %m%==01 (set m=112) else (set /a m=1%m%-1) rem 先月を確定する(末尾2桁のみを取得する) set m=%m:~-2% rem 去年を確定する(もしも12月だったら年を1引く) if %m%==12 set /a y=%y%-1 rem 指定のディレクトリにフォルダを作る mkdir \C\test01\%y%%m% mkdir \C\test02\%y%%m% exit とすればよいです。 スケジュールで月ごとに実行するよう登録するのがいいと思いますが 仮に間一日実行としても最初のチェックで1日時しか作成しません。 どうしてもVBSが良いなら [1日の時先月フォルダ作るよー.vbs] if split(date,"/")(2)=01 then Set fso = CreateObject("Scripting.FileSystemObject") fso.CreateFolder ("\C\test01\" & split(date-1,"/")(0)-1988 & split(date-1,"/")(1)) fso.CreateFolder ("\C\test02\" & split(date-1,"/")(0)-1988 & split(date-1,"/")(1)) end if 私ならこんな感じに組むかな?VBSはdate型が有るのでまぁ楽チンちゃ楽チンですけどオブジェクト定義とかVBSしらない人に説明するのがめんどうなので・・・。 あと西暦にしたい場合は-1988を消しせばOKです。 どっちも動作確認したので動くと思います。 あと仮パスなのでどうでもいいことですけど\C\ではなくc:\とかでテストください。そのままでは実行できません。 追加条件・補足等がほしければ言ってください。
その他の回答 (3)
- rooksan
- ベストアンサー率66% (4/6)
西暦、和暦関係なくやるとこんな感じ Option Explicit Dim nDate Dim f Dim zYm '現在の日付の取得 nDate = Now() '日付のチェック 今日は 8/1? ->年まで対象にするならYear関数を追加 If Month(nDate) = 8 And Day(nDate) = 1 Then '対象日の場合 Set f = CreateObject("Scripting.FileSystemObject") '前月の作成 今日が2008/08/01 なら 200807がzYmに返る nDate = DateAdd("m", -1, nDate) zYm = CStr(Year(nDate)) & myFormat(Month(nDate),2) 'チェック対象のフォルダー ' 今日が2008/08/01 なら引数はc:\test01\200807 checkDir "c:\test01\" & zYm ' 今日が2008/08/01 なら引数はc:\test02\200807 checkDir "c:\test02\" & zYm End If 'フォルダーチェック Sub checkDir(folderName) '存在チェック 存在していたら何もしない If f.FolderExists(folderName) Then Exit Sub End If 'フォルダーの作成 f.CreateFolder (folderName) End Sub '数値のフォーマト関数 ' VBSには詳しくないので・・・Format関数てなかった? Function myFormat(s, n) Dim ss ss = CStr(s) While (Len(ss) < n) ss = "0" + ss Wend myFormat = ss End Function
お礼
遅くなり申し訳ありませんでした。 貴殿と他の方のアドバイスにより何とかできそうです。 ありがとうございました
- shut0325
- ベストアンサー率40% (490/1207)
おそらく可能です。ただ、2007の表記は西暦と勘違いそうしな気が。 年号変わったらめんどうだし。 一応VBS側のサンプル載せます。エラー処理なし。 タスクは使ったことがないので、何らかの理由で処理もれしたりするかもしれませんが、その辺の対策もしてません。 '開始 Option Explicit Dim fSys Dim fName Dim nDate Set fSys = CreateObject("Scripting.FileSystemObject") '今月1日-1=先月末日 先月=去年の時の対応。 nDate=CDate((Year(Date) & "/" & Month(Date) & "/" & 1))-1 ' -1988は年号変換 fName= CStr(Right("00" & Year(nDate)-1988,2) & Right("00" &Month(nDate),2)) fSys.CreateFolder "C:\test01\" & fName fSys.CreateFolder "C:\test02\" & fName '終了
お礼
遅くなり申し訳ありませんでした。 貴殿と他の方のアドバイスにより何とかできそうです。 ありがとうございました。
- violet430
- ベストアンサー率36% (27472/75001)
可能だと思いますよ。
お礼
遅くなり申し訳ありませんでした。 貴殿と他の方のアドバイスにより何とかできそうです。 ありがとうございました