人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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


●質問者: レヴァイン
●カテゴリ:コンピュータ
✍キーワード:DoS WindowsXP コマンド バッチ ファイル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kntr1
●10ポイント

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%

◎質問者からの返答

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

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

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


2 ● RON
●30ポイント

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という視点にうなされました。

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


3 ● amalfi-0219
●40ポイント ベストアンサー

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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ