毎朝、PCを立ち上げるたびに、その日から1ヶ月前の日付を名前として持つフォルダをc:¥直下に自動的に作成するバッチファイルを欲しいのです。
具体的に言うと、今日が6月23日ですから、PCを立ち上げると、c:¥090523¥ というフォルダが生成されるようにしたいのです。
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
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%
早速のお返事ありがとうございます。
そうですね。存在しない日はまずいですね。
御指摘ありがとうございました。
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
------------------------------------------
一応、フォルダーがあるかないかもチェックしたので複数回実行しても大丈夫です。
あまりに丁寧な回答に感動しました。
DOSでなくVBSという視点にうなされました。
今回は誠にありがとうございました。
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
あまりの丁寧さに涙が出ました。
世間には素晴らしいかたが大勢いらっしゃるのですね。
ありがたく応用させていただきます。
また機会がありましたら、ぜひご指導・ご鞭撻のほどよろしく申し上げます。
あまりの丁寧さに涙が出ました。
世間には素晴らしいかたが大勢いらっしゃるのですね。
ありがたく応用させていただきます。
また機会がありましたら、ぜひご指導・ご鞭撻のほどよろしく申し上げます。