- ベストアンサー
現在時刻を取得してファイル名にする
いつもお世話になっています。 コマンドプロンプトから処理を実行し、その結果をログファイルとして残すバッチファイルを作成しています。 ログファイルを日付で管理したいので、ファイル名を "バッチファイル名_yyyymmdd.LOG"としたいのですが この"yyyymmdd"の部分で詰まってしまいました。 set NowDate=%date% set FileName=C:\temp\sample_%NowDate% としてみましたが、NowDateが"月 2003/07/28"となり、"/"のために ファイルが作成されませんでした。 %time%も":"が入ってしまうため、同様に作成されません。 バッチファイル内でyyyymmddを毎回記述し直せば楽なのでしょうが、 最終的にはタスクスケジュールに入れてしまいたいのでそれもできません。 どうしたら現在日をファイル名にすることができるのでしょうか? 御存知の方、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私も以前に同じ要件のバッチファイルを書いた事が有ります。 御参考にどうぞ。 但し、WIN2000用ですので、NT4.0以前やWin9xでは使用できないかも 知れません。肝は FOR 文なので、動作対象となるOSのヘルプも確認 してみて下さい。 あ、「%~n0」も使えるかどうか確認してみて下さい。 これの意味は、一般的な置き換え引数 %0 のファイル名部分抜き出しです。 ---- ここから ---- @ECHO OFF REM 現在日付時刻YYYYMMDDhhmmssを名前に持つファイルを作成する REM カレントディレクトリを基点へ移動しておくか、基点パスを持つ必要が有る… REM ワーク変数クリア SET WORKDATE= SET WORKTIME= SET TARGET= :RETRY REM echo DATE[%DATE%] TIME[%TIME%] REM 環境変数 DATE の内容を切り分け、必要な部分を結合する REM 例)月 2003/07/28 → 月, 2003, 07, 28, → 20030728 FOR /F "TOKENS=1,2,3,4,* DELIMS=/:. " %%A IN ('ECHO %%DATE%%') DO SET WORKDATE=%%B%%C%%D REM 環境変数 TIME の内容を切り分け、必要な部分を結合する REM 例)19:45:30.24 → 19, 45, 30, 24, → 194530 FOR /F "TOKENS=1,2,3,4,* DELIMS=/:. " %%F IN ('ECHO %%TIME%%') DO SET WORKTIME=%%F%%G%%H REM 自身のバッチファイル名+日付時刻でログファイル名を作成 SET TARGET=%~n0_%WORKDATE%%WORKTIME%.log REM ECHO TARGET : %TARGET% REM 念の為、同名ファイルの存在をチェックする REM 名前がダブらないよう時刻が進むまでリトライさせる REM 1秒スリープできればスマートなのだが… IF EXIST %TARGET% ( REM ECHO -------- RETRY -------- GOTO RETRY ) REM 以降、%TARGET% を用いて処理を進める ECHO ファイル名:%TARGET% > %TARGET% :FINISH REM ワーク変数クリア(削除) SET WORKDATE= SET WORKTIME= SET TARGET= rem PAUSE ---- ここまで ----
その他の回答 (1)
- ykkw_2001
- ベストアンサー率26% (267/1014)
コントロールパネル/地域のオプション/日付 で日付の書式を"yyyy-MM-dd"とかに変更してみてはいかがでしょうか?
お礼
回答ありがとうございます。 ですが、このバッチファイルのために書式を変えるのはダメ、と言われてしまいました。 機会がありましたらまたよろしくお願いします(ペコリ)。
お礼
回答ありがとうございます。 時刻ばかりか、実行ファイル名まで取得できるなんて・・・。 コマンドの奥深さを改めて感じました。 FOR文は初めて目にしたので、コメントが大変ありがたかったです。 かなり汎用的なバッチファイル、ありがとうございました!ありがたく使わせていただきます。 機会がありましたらまたよろしくお願いします(ペコリ)。