- PR -

Windowsの環境変数「date」や「time」について

1
投稿者投稿内容
wine
会議室デビュー日: 2005/11/26
投稿数: 9
投稿日時: 2006-06-26 23:05
宜しくお願いします。
Windowsの環境変数「date」や「time」をバッチファイル(コマンド)に利用
できると思いますが、この「date」や「time」を引数に利用した場合、実際の
日付や時刻の情報を取得してくるのでしょうか。

この質問をさせていただいたのは、@ITの情報(下記)を利用している環境下で
問題が生じているからです。
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

上記URLで紹介されている手順をそのまま利用し、定期的にバッチファイルを実行
してバッチ実行時刻をフォルダ名にする仕組みをWindowsサーバ上で運用している
のですが、毎日運用していると、たまにフォルダが作成されないことがあります。
例えば、Windows OSの時間で2006年6月26日23:00にバッチファイルが実行された時、
通常であれば[20060626-230000]形式でフォルダ名が作成されるはずなのですが、
[20060626-]のように中途半端なフォルダ名で作成されてしまいます。

※参考情報
 ・日常運用では、Windowsサーバ上で時刻がおかしくなることは感じない。
 ・イベントビューワ(システム)には、時刻同期に失敗したとかのイベントは
  特に記録されていません。

必要情報ありましたらお知らせしますので、宜しくお願いします。



[ メッセージ編集済み 編集者: winesman 編集日時 2006-06-26 23:08 ]
dellgate
大ベテラン
会議室デビュー日: 2004/02/20
投稿数: 198
投稿日時: 2006-06-27 09:39
はじめまして

直接の回答ではないですが。。。

>実際の日付や時刻の情報を取得してくるのでしょうか。
少なくとも、%DATE% %TIME%で出力する分には実行したコンピュータの
日付、時刻を取得してますね。

なので、必要な値に整形する部分での問題のように思えます。
 *参照URLのサイトでは%TIME%の場合の処理についてはサンプルがない
  ようなので実際にどのように記述されているのかはわかりませんが。


PoH
常連さん
会議室デビュー日: 2003/09/09
投稿数: 48
投稿日時: 2006-06-27 09:49
timeで使ってる関数で
「:」とか出力してしまってるとか?
timeの場合午前中とかで
桁数が変わる場合あるのを考慮せず
固定で数字を抜き出しているとか?

吐き出すファイル内に
同じコマンドの文字列を吐き出してみてはいかがでしょうか。

[ メッセージ編集済み 編集者: PoH 編集日時 2006-06-27 10:03 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-27 10:21
引用:

winesmanさんの書き込み (2006-06-26 23:05) より:

毎日運用していると、たまにフォルダが作成されないことがあります


私はこの部分に着目しているので、%time:~m,n% の取り出しがどうなっているかに興味があります。
"たまに" を考慮すると、%time% とは無関係なところで、どうこうなっている可能性もあるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
wine
会議室デビュー日: 2005/11/26
投稿数: 9
投稿日時: 2006-06-27 11:21
皆様アドバイスありがとうございます。
皆様からいただきましたご指摘が全て該当していました。
問題は、%timeから数字の文字列を整形する部分でした。
下記の通り、時刻の「時」が一桁で表示される際を考慮しない構文でフォルダ名
(BNAME)を取得するようにしたため、夜間0:00〜09:59の間にバッチファイルが実行
されると、問題が発生しまっていました。

 set BDATE=%date:~-10%
 set BTIME=%time:~-11%
 set BNAME=%BCDATE:~0,4%%BCDATE:~5,2%%BCDATE:~8,2%-%BCTIME:~-11,2%%BCTIME:~-8,2%%BCTIME:~-5,2%

見よう見まねで熟慮せずに作成したのが原因でした。失礼致しました。

0:00〜09:59の時間帯にでも柔軟にフォルダ名に引用できる方法をご存知であれば、
すみませんが、お教えいただければ幸いです。宜しくお願いいたします。
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-06-27 12:58
for /f %%i in ('time /t') do set rowtime=%%i
set hhmm=%rowtime:~0,2%%rowtime:~3%
echo %hhmm%

で、どうでしょうか?
wine
会議室デビュー日: 2005/11/26
投稿数: 9
投稿日時: 2006-06-27 22:22
わちゃ様
情報ありがとうございます。
いただきました構文できちんと動作することを確認できました。

dellgate様、PoH様、じゃんぬねっと様、わちゃ様
色々と助かる助言をすぐにくださって本当にありがとうございました。
Uchikoshi
@ITエディタ
会議室デビュー日: 2001/07/27
投稿数: 197
投稿日時: 2006-06-28 03:07
もう解決しているようですが。。

コード:
echo %time: =0%



とすると、分表示の0サプレスをやめて、先頭に0が付くようになります。
この意味については、set /? コマンドで確認してください。

for文でコマンドを呼び出すよりも、(理論上は ^^;;)わずかに早くなりますので、
%time% の評価に伴う時間のずれが少なくなる可能性があります(あくまでも可能性ですが)。
なおこれは、Windows 2000でも使用可能です。
1

スキルアップ/キャリアアップ(JOB@IT)