• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル名に自動的に日付と日時を使いたい)

自動的に日付と日時を使いたい

このQ&Aのポイント
  • バッチファイルやコマンドプロンプトを勉強している中で、ファイル名に自動的に日付と日時を使いたいと思っています。現在のファイル名の固定が上書きの原因となってしまうため、動的に取得できる日付と時刻をファイル名に盛り込む方法を模索しています。
  • あるソフトによるファイルの保存先が固定されたファイル名であり、新規ファイルの保存のたびに上書きされてしまいます。このため、現在の日付と時刻をファイル名に動的に取得する方法を調査しています。
  • バッチファイルやコマンドプロンプトの勉強中に、ファイル名に自動的に日付と日時を使いたいと思いました。現在のファイル名の固定が問題となっており、新規ファイルの保存のたびに上書きされてしまいます。そこで、現在の日付と時刻をファイル名に動的に取得する方法を模索しているところです。

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

  • ベストアンサー
  • foitec
  • ベストアンサー率43% (1080/2457)
回答No.1

日付と時刻を取り出すには環境変数から簡単に引くことが出来ます。 例えば日付は %date%  時刻は %TIME% ですね。 コマンドラインで >echo "%DATE%" "%TIME%" と打ってみてください、"2011/10/07" "10:03:49.53" のように返してきます。 これを利用すればお望みのことはできるのですが実はそんなに簡単ではありません。 というのは、この日付と時刻で返してきたデータには「/」や「:」といった、 ファイル名としては利用できない文字が含まれています。 ファイル名を生成する場合にはこれらの文字を取り除き、数字の部分だけを使わなければなりません。 dateやtime変数から、数字の部分だけを取り出すには、単に「%date%」「%time%」とするのではだめで、 変数値の部分文字列抽出用の修飾を行う必要があるのです。 日付で考えると 「2011/10/07」のような文字列の入ったdate変数から数字の部分だけを抜き出すには、 年: 最後尾より10文字目から、4文字分 月: 最後尾より5文字目から、2文字分 日: 最後尾より2文字目から、2文字分 を取り出せばよい事が分かりますね。 具体的には以下のような記述を使います。 %date:~-10,4%%date:~-5,2%%date:~-2,2% 試しにコマンドラインで確認すると・・・ >echo %date:~-10,4%%date:~-5,2%%date:~-2,2% 20111007 となります。 時刻にしても然りです。 しかしここにも落とし穴があります。 午前0時から午前10時(00:00:59~9:59:59)の場合、time変数が返す文字列の先頭には、「0」ではなく、空白文字が含まれます。 (00、01、02……、09、10、11、……ではなく、0、1、2、……、9、10、11、……となるのです)。 つまり時(0~23)の数値はゼロサプレスされて表示されていので時間を取り出すために なので単純に「%time:~0,2%%time:~3,2%%time:~6,2%」とすると、先頭に空白文字が入っている可能性が生じます。 これをそのままファイル名やバッチファイルのパラメータとして利用すると、空白文字によって引数の区切りとして扱われるなどの不具合が生じる可能性が生じます。 なので、time変数に含まれる空白文字を、最初に数字の0に置き換えておくようにします。 変数の置換は「%V:s1=s2%」と記述します。ここでs1には空白1文字を、s2には「0」を指定します。 具体的には、一時変数に入れて置換します。 >set time2=%time: =0 これで先頭に空白があれば0に置き換えられます。 ここで「%time%」の内容をいったん変数time2に入れてから次の行で2桁ずつ取り出しているのは、文字列の置換と部分抽出を同時に行えないからです。 その後に >echo %time:~0,2%%time:~3,2%%time:~6,2% とすれば午前午後に関係なく同じ桁数の時刻が返されます。 これらを利用してバッチファイルを記述してください。 もし、date変数を3回参照している間に日付が変わってしまっても問題がないようにするためには別のテクニックが必要です。 以上ご参考に。

heavensairport
質問者

お礼

うわ、こんなに丁寧に詳細に! ありがとうございます(泣) しかもちゃんとファイル名に使えて、かつ不具合が出ないような処理まで…… 恐縮ですm(_ _)m しかし私の基本部分の理解不足のせいで、foitec様の回答をどのように 保存先のパスに流用するのか(実際にどう入力するのかや、バッチファイルの効果を取り出すための操作等)がいまだ分からず、実践はもう少し先になりそうです。 せっかくの素晴らしい回答をすみやかに活かせず申し訳ありません。 分からないことというのは本当に難しいですね…… この度はありがとうございました。