WindowsXP SP2 の DOSコマンドを使ったプログラムについてお聞きします。


毎朝、PCを立ち上げるたびに、その日から1ヶ月前の日付を名前として持つフォルダをc:¥直下に自動的に作成するバッチファイルを欲しいのです。
具体的に言うと、今日が6月23日ですから、PCを立ち上げると、c:¥090523¥ というフォルダが生成されるようにしたいのです。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2009/06/23 19:34:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:amalfi-0219 No.3

回答回数40ベストアンサー獲得回数5

ポイント40pt

VBSで書いてみました。

以下のスクリプトをテキストファイルに貼り付けて

適当な名前.vbsとして保存すれば実行できると思います。

とりあえず1ヶ月前=30日前として処理しています。

また、ログはイベントログに出してます。

  • ここから

Set objShell = Wscript.CreateObject("Wscript.Shell")

' 現在日付から何日前の情報を表示するか設定

' とりあえず30日で設定

delTargetDate = Date - 30

' yymmdd形式に変換

dateString = DateFormat(delTargetDate)

' フォルダ位置はC:\直下

strFolder = "C:\" & dateString

' 以下フォルダ作成

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If Err.Number = 0 Then

If objFSO.FolderExists(strFolder) = True Then

strMessage = "フォルダ " & strFolder & " は既に存在しています。"

eventFlag = 2

Else

objFSO.CreateFolder(strFolder)

If Err.Number = 0 Then

strMessage = "フォルダ " & strFolder & " を作成しました。"

eventFlag = 4

Else

strMessage = "エラー1: " & Err.Description

eventFlag = 1

End If

End If

Else

strMessage = "エラー2: " & Err.Description

eventFlag = 1

End If

' イベントログ(アプリケーションログ)に出力

Call objShell.LogEvent(eventFlag, strMessage, localhost)

Set objFSO = Nothing

Set objShell = nothing


' 日付書式変換用関数

function DateFormat(data)

y = right(year(data),2)

if month(data)<10 then

m = "0" & cstr(month(data))

else

m = month(data)

end if

if day(data)<10 then

d = "0" & cstr(day(data))

else

d = day(data)

end if

dateformat = y & m & d

end function

  • ここまで
id:cqb00022

あまりの丁寧さに涙が出ました。

世間には素晴らしいかたが大勢いらっしゃるのですね。

ありがたく応用させていただきます。

また機会がありましたら、ぜひご指導・ご鞭撻のほどよろしく申し上げます。

2009/06/23 19:33:39

その他の回答2件)

id:kntr1 No.1

回答回数82ベストアンサー獲得回数14

ポイント10pt

1ヶ月前で1月のときだけ去年の12月にしたバッチファイル

ただ、下の場合、存在しない日が出来ると思うんですが30日前とかじゃなくて1ヶ月前でいいんですよね

存在しない例: 3月30日 → 月をマイナスすると 2月30日

set YY=%date:~0,4%

set MM=%date:~5,2%

set DD=%date:~8,2%

set /a EM=%MM%-1

set EM=00%EM%

set EM=%EM:~-2%

if %EM%==00 ( set YY=%YY%-1 )

mkdir %YY%%EM%%DD%

id:cqb00022

早速のお返事ありがとうございます。

そうですね。存在しない日はまずいですね。

御指摘ありがとうございました。

2009/06/23 19:29:51
id:ttakao No.2

回答回数276ベストアンサー獲得回数31

ポイント30pt

DOSコマンド。。。。VBScriptなら以下でできます。----内を mainnt.vbs なんて名前で保管して実行してください。

わかりやすく書いたつもりなので、改造もしくはバグ収拾も簡単か、と思います。

------------------------------------------

Option Explicit

dim thisyear,thismon, thisday, prevmon

thisyear = Year(Date)

thismon = Month(Date)

thisday = Day(Date)

prevmon = thismon - 1

if prevmon = 0 then prevmon = 12

Dim objFSO, objFolder

Dim foldername,cyear,cmon,cday

cyear = right(CStr(thisyear), 2)

cmon = right( "0"+CStr(prevmon) ,2)

cday = right( "0"+CStr(thisday) ,2)

foldername = "c:\"+cyear+cmon+cday

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

if (Not objFSO.FolderExists(foldername)) then

objFSO.CreateFolder(foldername)

' wscript.echo foldername+" created"

End if

------------------------------------------

一応、フォルダーがあるかないかもチェックしたので複数回実行しても大丈夫です。

id:cqb00022

あまりに丁寧な回答に感動しました。

DOSでなくVBSという視点にうなされました。

今回は誠にありがとうございました。

2009/06/23 19:30:53
id:amalfi-0219 No.3

回答回数40ベストアンサー獲得回数5ここでベストアンサー

ポイント40pt

VBSで書いてみました。

以下のスクリプトをテキストファイルに貼り付けて

適当な名前.vbsとして保存すれば実行できると思います。

とりあえず1ヶ月前=30日前として処理しています。

また、ログはイベントログに出してます。

  • ここから

Set objShell = Wscript.CreateObject("Wscript.Shell")

' 現在日付から何日前の情報を表示するか設定

' とりあえず30日で設定

delTargetDate = Date - 30

' yymmdd形式に変換

dateString = DateFormat(delTargetDate)

' フォルダ位置はC:\直下

strFolder = "C:\" & dateString

' 以下フォルダ作成

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If Err.Number = 0 Then

If objFSO.FolderExists(strFolder) = True Then

strMessage = "フォルダ " & strFolder & " は既に存在しています。"

eventFlag = 2

Else

objFSO.CreateFolder(strFolder)

If Err.Number = 0 Then

strMessage = "フォルダ " & strFolder & " を作成しました。"

eventFlag = 4

Else

strMessage = "エラー1: " & Err.Description

eventFlag = 1

End If

End If

Else

strMessage = "エラー2: " & Err.Description

eventFlag = 1

End If

' イベントログ(アプリケーションログ)に出力

Call objShell.LogEvent(eventFlag, strMessage, localhost)

Set objFSO = Nothing

Set objShell = nothing


' 日付書式変換用関数

function DateFormat(data)

y = right(year(data),2)

if month(data)<10 then

m = "0" & cstr(month(data))

else

m = month(data)

end if

if day(data)<10 then

d = "0" & cstr(day(data))

else

d = day(data)

end if

dateformat = y & m & d

end function

  • ここまで
id:cqb00022

あまりの丁寧さに涙が出ました。

世間には素晴らしいかたが大勢いらっしゃるのですね。

ありがたく応用させていただきます。

また機会がありましたら、ぜひご指導・ご鞭撻のほどよろしく申し上げます。

2009/06/23 19:33:39

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません