• ベストアンサー

現在時刻を取得してファイル名にする

いつもお世話になっています。 コマンドプロンプトから処理を実行し、その結果をログファイルとして残すバッチファイルを作成しています。 ログファイルを日付で管理したいので、ファイル名を "バッチファイル名_yyyymmdd.LOG"としたいのですが この"yyyymmdd"の部分で詰まってしまいました。 set NowDate=%date% set FileName=C:\temp\sample_%NowDate% としてみましたが、NowDateが"月 2003/07/28"となり、"/"のために ファイルが作成されませんでした。 %time%も":"が入ってしまうため、同様に作成されません。 バッチファイル内でyyyymmddを毎回記述し直せば楽なのでしょうが、 最終的にはタスクスケジュールに入れてしまいたいのでそれもできません。 どうしたら現在日をファイル名にすることができるのでしょうか? 御存知の方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BILLY-J
  • ベストアンサー率57% (60/105)
回答No.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 ---- ここまで ----

lovelypooh
質問者

お礼

回答ありがとうございます。 時刻ばかりか、実行ファイル名まで取得できるなんて・・・。 コマンドの奥深さを改めて感じました。 FOR文は初めて目にしたので、コメントが大変ありがたかったです。 かなり汎用的なバッチファイル、ありがとうございました!ありがたく使わせていただきます。 機会がありましたらまたよろしくお願いします(ペコリ)。

その他の回答 (1)

  • ykkw_2001
  • ベストアンサー率26% (267/1014)
回答No.1

コントロールパネル/地域のオプション/日付 で日付の書式を"yyyy-MM-dd"とかに変更してみてはいかがでしょうか?

lovelypooh
質問者

お礼

回答ありがとうございます。 ですが、このバッチファイルのために書式を変えるのはダメ、と言われてしまいました。 機会がありましたらまたよろしくお願いします(ペコリ)。

関連するQ&A

  • バッチ・ファイル中で時間をファイル名に使用したいです。

    いつもお世話になっております。 バッチ・ファイルを使用して、「netstat」コマンドの結果をファイルにリダイレクトし、そのファイル名に時間を使用したいです。 いま、使用しているファイルは、「バッチファイルA」と「バッチファイルB」の2つがあります。 「バッチファイルA」は0時~9時まで、「バッチファイルB」は10時~24時までとなっています。これを、1つのファイルにまとめたいのですが、よろしくご教示をいただけませんでしょうか。 --------------------------- @「バッチファイルA」(0時~9時) set TIME_A=%TIME% set TIME_B=%TIME_A:~1,4% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt --------------------------- --------------------------- @「バッチファイルB」(10時~24時) set TIME_A=%TIME% set TIME_B=%TIME_A:~0,5% set TIME_B=%TIME_B::=% set FILENAME=%TIME_B% netstat -s -e >C:\Temp\%FILENAME%.txt ---------------------------

  • バッチファイルで同じフォルダ名がある場合

    バッチファイルで下記のように実行後にフォルダ名を指定して フォルダを作成したいのですが既に同じフォルダ名があった場合 同じフィルだがある旨のメッセージを表示するのとそこでバッチファイルを 終了してよいか?というようなバッチファイルを作成したいのですが バッチファイルコマンドプロンプトの知識があまりありません。 どなたか教えてください。 echo off set /p USER_INPUT=フォルダ名を入れてください。: mkdir %USER_INPUT%

  • 日付時間をファイル名にしたいが…。

    コマンドプロンプトからログファイルを作成しようとしています。 ファイル名の後に日付・時間をつけて TEST_YYYYMMDD_HHMMSS.log形式にしたいと思っています。 (例:TEST_20050118_120000.log) それで、ファイル名を以下のように指定したのですが TEST_%date:~2,4%%date:~7,2%%date:~10,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log これだと、0時~9時の間は TEST_20050118_ 90000.log のように時間の頭ヒトケタが空白になってしまうらしく、 実行させてもエラーになってしまいます. なにか良い方法がありますでしょうか。 よろしくご教授お願いいたします。

  • コマンドプロンプトのコマンドを使ってバッチファイルを作ってみたいのですが

    プログラミングについてはコマンドプロンプトでバッチファイル(ログファイルの作成など)を何度か作成したことのあるだけの初心者なのですが、 バッチファイルは簡単で幅広い実用性があるように感じています。  コマンドプロンプトを使ったバッチファイルでどのようなことができるのか実用例が載っている本を探しています。  これは役に立つ!という本がありましたら是非教えていただけませんか?

  • MS‐DOSバッチ作成について 多量ファイルの移動 "IF"と "FOR"の使い方?

    初めまして。よろしくお願いします。 コマンド初心者 & 初書き込みタケブーです。 早速ですが、バッチ作成についての質問です。 "D:\temp\"に下記のようなファイルが毎日100件程度出力されます。 「AAA_20090430121212.log」 「BBB_20090430121212.log」 「CCC_20090430121212.log」 「AAA_20090430131212.log」 「BBB_20090430131212.log」 「CCC_20090430131212.log」 ・ ・ 「○○○_YYYYMMDDHHMISS.log」 ・ ・ 「AAA_20090701122212.log」 「BBB_20090701122212.log」 「CCC_20090701122212.log」 このファイルを対象月の"D:\temp\YYYYMM"フォルダに移動し、 さらに対象日の"D:\temp\YYYYMM\YYYYMMDD"フォルダに移動したいと 考えております。 未来の月日のフォルダは作成したくありません。 そのため、ファイル名を参照し、 フォルダを作成するようにしたいのです。 また、当日分のファイルは移動対象とはしたくありません。 if文、for文を使用して何とかしようとしたのですが うまくいきません。 ご指導のほどよろしくお願いします。

  • Windowsのタスクについて、どなたか教えていただけると助かります。

    Windowsのタスクについて、どなたか教えていただけると助かります。 SQLServer2005のバックアップを自動で取るため、下記内容が記述されたバッチファイルを利用することにしました。 sqlcmd -S.\SQL -Usa -P12334 -iC:\Temp\backup.sql > C:\Temp\backup.log このバッチファイルを、Windowsのコントロールパネルのタスクを利用して、定期的にスケジュールを決めて実行させたいのですが、上手く動いてくれません。 記述されている内容をコマンドプロンプトに貼り付けて実行すれば問題なく動くのですが、タスクで実行すると、プロンプト画面が一瞬表示されますが、そこで終わってしまっているようです。 こういった現象が起きる原因というのは、一体ドコにあるのでしょうか? ※OSはXPで、ログインしているユーザーは「Administratorグループ」に所属しています。  なお、私のPCでは問題なく動作しますが、取引先の会社に行くと、上記の問題が起きてしまいます。

  • バッチやVBSの動作について

    Windows2003 Serer上で 週一回、ログファイルが溜まる ディレクトリがあります。 ディレクトリ名はYYYYMMDD となっています。 毎週1回、ディレクトリが作成されるため、古いものから順番に 自動で削除を行いたい為、 バッチか何かをタスクスケジュールで週一度、自動に動かすことを考えています。 バッチ、もしくはvbsはどのようなものを作成すれば宜しいでしょうか。当方、まったく初心者の為、そのままを 説明と共に頂ければとてつもなくありがたいです。 宜しくお願い致します。

  • まとめてファイル名を変更したい

    あるフォルダに存在するファイル名に”RAWDATA"を含むテキストファイルを 任意のファイル名でCSVに変更したいのですが、 バッチファイルで set /p filename= rename d:\あるフォルダ\RAWDATA*.txt %filename%*.csv で簡単にできるかなと思ったのですが、 ”RAWDATA”の部分は入力した分しか変更されないようでした。 例えば”abc”と入力すると”abcDATA”となります。 入力したファイル名に置き換わるようにするには どのようにしたら良いのでしょうか? バッチ初心者ですがよろしくお願いします。

  • バッチファイル ファイル名の変更

    お世話になります。 バッチファイル(*.bat)の開発をしています。 現在、 C:temp\20100101\xxx.data1.file.log.dat というパスがあるとして、ファイル名だけに対し、 .(ピリオド)をなくしたいと考えています。 つまり、上記のファイルを、 C:temp\20100101\xxxdata1filelogdat のように置き換えたいと思っています。 .(ピリオド)をブランクに置き換えると C:temp\20100101\xxx data1 file log dat のようになってしまうので、隙間ができないようにしたいです。 実装方法をご教授頂けますでしょうか。

  • バッチファイル 現在のフォルダ名をファイル名に置き換える

    こんにちは。超初心者なのですが教えてください。 ある複数フォルダに格納されている.txtファイルを、現在の フォルダ名を取得して、別フォルダにリネームして 格納するバッチファイルを作成したいと考えています。 for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。 例えば、 データ取得元として以下のファイルがあったら C:\temp\20100101\data1.txt C:\temp\20100101\data2.txt C:\temp\20100101\data3.txt C:\temp\20100102\data1.txt C:\temp\20100102\data2.txt C:\temp\20100103\data1.txt C:\temp\20100103\data2.txt これを別フォルダに、現在のフォルダ名をファイル名にくっつけて 以下のように一つのフォルダに纏めて格納したいと思っています。 ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド を使うかもしれないです。 C:\test\data1_20100101.txt C:\test\data2_20100101.txt C:\test\data3_20100101.txt C:\test\data1_20100102.txt C:\test\data2_20100102.txt C:\test\data1_20100103.txt C:\test\data2_20100103.txt 実装方法として以下までは考えましたが、これ以上は無理そうです。 rem set A=C:\temp rem set B=C:\test for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A" for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B" for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) ) ) ) popd? ) ) 申し訳ありませんが、お助け願います。