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

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

ファイル名に自動的に日付と日時を使いたい

バッチファイルやコマンドプロンプトの存在を今日知ったばかりで、 いま一夜漬けで勉強していますが同時に質問もさせてください。 とあるソフトによるファイルの保存先が [C:\Program Files\soft\folder\name.jpg] [参照ボタン] のようになっていて、データの保存自体はモニタをつけずにキーボードだけでできるのですが、 上のように名前が固定なので新規ファイルの保存のたびに上書きされてしまいます。 (保存のたびにリネームする必要がある) そこで現在の日付と時刻を動的に取得してファイル名にする仕組みを、 上のパスに盛り込めないかとweb上をあさっています 過去の質問を見たところ勉強不足でよく理解できず、また用途も微妙に違う気がしました 御助力をお願いいたします。

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

  • ベストアンサー
  • foitec
  • ベストアンサー率43% (1079/2453)
回答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様の回答をどのように 保存先のパスに流用するのか(実際にどう入力するのかや、バッチファイルの効果を取り出すための操作等)がいまだ分からず、実践はもう少し先になりそうです。 せっかくの素晴らしい回答をすみやかに活かせず申し訳ありません。 分からないことというのは本当に難しいですね…… この度はありがとうございました。

関連するQ&A

  • ファイル名を日付の名前にリネームするバッチファイルの作り方

    Windowsを使い、Webアプリのログファイルをテキストで保存させてますが、今のところひとつのファイルにログが貯まる形式になってますので、これをWindowsのタスクを使ってバッチファイルを作って毎日テキストのログファイルを日付の名前にリネームしようと検討しております。 日付の名前にファイルをリネームする方法をお教え下さい。もしくは同等の機能を有したフリーソフトもお願い致します。

  • 同じファイル名でリネームしたい。

    どなたかご教示頂ければ幸いです。 デジカメで撮影したjpg写真を前回と同じドライブの同じフォルダーに保存するとき、ファイル名が同じだと「上書き保存」かどうかを訊いてきますが、以前WindowsMeのころはファイル名の後ろに(2)などを自動に付けてリネームしてくれました。XPでもその設定は可能でしょうか?可能であれば設定の仕方を教えて頂ければ幸いです。

  • リネーム中にファイルを失ったのですが

    このカテでいいのか分かりませんが。。。 写真データのリネーム中に上書きにした後リネームが失敗してしまい(理由は分かりません) リネーム中のデータが消えてしまいました。 検索をかけるとjpgアイコンではなくIEアイコンで 探しては来るのですがやっぱり開けません。 これはただの痕跡だと教えてもらったのですが 何とかして見れるようにはならないのでしょうか? IE上で見れたらjpgファイル保存し直したいのですが。。。 リーネームの際使用したのはFlexible Renameです。 よろしくおねがいします!!

  • ファイルの保存名を自動的に変更したいのですが

    同じファイルを短時間(1~2分)のうちに保存したいのですが、 同ファイルだと上書き保存になってしまいます。 時刻をファイル名としてとも考えていますがよくわかりません。VBは初級程度です。 出来るだけ簡単にご教授お願いいたします。

  • photoshopの自動処理でファイル名を変えて保

    photoshopのバッチやドロップレットを使って自動処理がしたいです。 具体的には画像ファイル001.jpg ~ 010.jpgがあった場合に 001.jpg ~ 010.jpgのそれぞれを 横幅600pxにリサイズして001-lerge.jpgというファイル名で保存 横幅400pxにリサイズして001-midum.jpgというファイル名で保存 横幅200pxにリサイズして001-small.jpgというファイル名で保存 のように3種類のファイルに新規に保存を各画像に対して繰り返す という風にしたいのですが どのようにすればできるのでしょうか?

  • ファイルコピー→リネーム(日付時刻をファイル名)のバッチファイル

    「フォルダ1」のファイルA(テキストファイル)を「フォルダ2」へコピーする。 この時「フォルダ1」にはファイルAを残す。 「フォルダ2」へコピーしたファイル名を「日付時刻.txt」(200303041405.txt)とする。 以上のような操作をワンクリックで行いたくて、バッチファイルを考えたのですが、日付、時刻の入ったファイルネームにリネームがどうすればいいものか…いろいろ調べてみるとどうもむずかしそうなんですが、ご存知の方よろしくお願いします。  またWSHや他ソフトウェアで可能なものがあれば教えていただきたいです。 当方win98se環境での使用ですが、win2000pro環境での実行も可能です。 よろしくお願いします。

  • デジカメ画像取り込み、ファイル名を日付で管理

    現在デジカメ画像、iPhoneで撮った画像共にFinePixViewerというソフトで取り込んでいます。このソフトの特徴はファイル名を撮影の日時にリネームして取り込むことができ、ファイル名を見れば画像を撮った日時がわかるので重宝しています。 質問1. 例えば一度デスクトップにデジカメやiPhoneからコピーした画像をこのソフトを通してリネームすることによって、ファイルの劣化などはないと思うのですがどうでしょうか?画像は単にコピーでファイル名をリネームしていると思うのですが。その根拠としてEXIF情報とかはそのままなので。 質問2. 現在はLUMIXを使っているのですが、付属ソフトにはFinePixViewerのように、ファイル名を日付で保存する機能はないようです。FinePixViewer以外にも日付をファイル名にできるフリーソフトはありますか? 質問3. デジカメ画像の保存方法について。私の場合ファイル名で撮った日付がわかるようにした上で、ジャンル別にフォルダを作って保存しているのですが、10年以上のデジカメ画像があり、もっと効率の良い、わかりやすいお勧めの保存法があったら教えて欲しいのですが。もちろんパソコンがいつクラッシュしても大丈夫なようにバックアップは外付けHDDに毎月保存しています。

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

    ある複数フォルダに格納されているファイルを、フォルダ名に リネームするバッチファイルを作成したいです。 ●リネーム前 C:\リネーム\あいうえお\data.txt C:\リネーム\かきくけこ\data.txt C:\リネーム\さしすせそ\data1.txt C:\リネーム\さしすせそ\data2.txt C:\リネーム\たちつてと\data1.log C:\リネーム\たちつてと\data2.log C:\リネーム\なにぬねの\data.log ↓ ●リネーム後 C:\リネーム\あいうえお\あいうえお.txt C:\リネーム\かきくけこ\かきくけこ.txt C:\リネーム\さしすせそ\さしすせそ 1.txt C:\リネーム\さしすせそ\さしすせそ 2.txt C:\リネーム\たちつてと\たちつてと 1.log C:\リネーム\たちつてと\たちつてと 2.log C:\リネーム\なにぬねの\なにぬねの.log 知識がなく申し訳ありませんが、お助け願います。。 pause cd c:\リネーム dir /s /b C:\リネーム\ > file.tmp for /f "delims=" %%F in (file.tmp) do ( for /f "delims=\ tokens=3" %%D in ("%%F") do ( REN %%F C:\リネーム\%%D\%%D%%~xF )) del file.tmp pause どうもうまくいきません。。。

  • 日付付きのログファイル名

    バッチのログファイルを日付をつけて保存するようにしようと思っています。 ----------------------------------------------- set DATE=%date:~0,4%%date:~5,2%%date:~8,2% set logfile=c:\opt\BackupTools\log\BACKUP_%DATE%.log echo メッセージ >>%logfile% ----------------------------------------------- 1回目に実行時には期待通りBACKUP_20060909.logのようなファイルが出来たりしますが、2回目の実行になると出来たファイルに上書きされないし、新しく生成されるログファイルはBACKUP_2006099.logだったり、BACKUP_2006.logになったりしますが、何が原因なのでしょうか。

  • バッチファイルの作り方(CSV→タブ区切り)

    CSVファイルをタブ区切りにする手順は ツールーバーの 【データ】→【区切り位置】→カンマ、タブ などの設定で出来ると思います。 その手順を何度も繰り返すのが面倒なため、 バッチファイルを作成しようと考えています。 やりたい事としまして、 (1) .csvファイルをコマンドプロンプトに入れる(ドラックドロップ) (2) カンマ区切り→タブ区切りに変換し、上書き保存 ということをコマンドプロンプト(バッチファイル)で行いたいです。 関数としては for /f を使うのだと思うのですが、 よく分からないため教えていただきたいです。 宜しくお願いいたします。