アプリ版:「スタンプのみでお礼する」機能のリリースについて

バッチファイルやコマンドプロンプトの存在を今日知ったばかりで、
いま一夜漬けで勉強していますが同時に質問もさせてください。

とあるソフトによるファイルの保存先が
[C:\Program Files\soft\folder\name.jpg] [参照ボタン]
のようになっていて、データの保存自体はモニタをつけずにキーボードだけでできるのですが、
上のように名前が固定なので新規ファイルの保存のたびに上書きされてしまいます。
(保存のたびにリネームする必要がある)

そこで現在の日付と時刻を動的に取得してファイル名にする仕組みを、
上のパスに盛り込めないかとweb上をあさっています

過去の質問を見たところ勉強不足でよく理解できず、また用途も微妙に違う気がしました
御助力をお願いいたします。

A 回答 (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回参照している間に日付が変わってしまっても問題がないようにするためには別のテクニックが必要です。

以上ご参考に。
    • good
    • 3
この回答へのお礼

うわ、こんなに丁寧に詳細に! ありがとうございます(泣)
しかもちゃんとファイル名に使えて、かつ不具合が出ないような処理まで……
恐縮ですm(_ _)m

しかし私の基本部分の理解不足のせいで、foitec様の回答をどのように
保存先のパスに流用するのか(実際にどう入力するのかや、バッチファイルの効果を取り出すための操作等)がいまだ分からず、実践はもう少し先になりそうです。
せっかくの素晴らしい回答をすみやかに活かせず申し訳ありません。

分からないことというのは本当に難しいですね……
この度はありがとうございました。

お礼日時:2011/10/07 23:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!