1

退職した開発者が作成した Windows バッチ ファイルを変更する必要があります。すでにあるものの一部を次に示します。

set date/t=%currentdate%
for /f "tokens=2-4 delims=/ " %%a in ('date/t') do (
set fmonth=%%a) & (set fdate=%%b) & (set fyear=%%c)

これがどのように/なぜ機能するのかほとんど理解できませんが、設計どおりに機能します。これを今日実行すると、fmonth は 08、fdate は 17、2012 年の場合は fyear になります。しかし、これから必要なのは時間と秒です。私はあまりにも長い間推測してグーグルで調べてきましたが、専門家の助けが必要です.

ポインタはありますか?

ありがとう!

4

2 に答える 2

2

rene の回答は、すべてのロケールで機能するわけではありません。コンマを使用するものもあれば、小数点としてピリオドを使用するものもあります。さらに、ソリューションは単一の FOR ステートメントに要約できます。以下は、すべてのロケールで機能するはずです。小数秒は実際にはセンチ秒 (1/100) であり、ミリ秒 (1/1000) ではありません。

for /f "tokens=1-4 delims=:.," %%A in ("%time%") do (
  set fhour=%%A
  set fmin=%%B
  set fsec=%%C
  set fcsec=%%D
)

値を使用して数学的計算を行いたい場合は、追加の作業が必要です。10 未満の値にはゼロがプレフィックスとして付けられますが、これは問題のようには見えないかもしれません。ただし、SET は 8 進数としてゼロのプレフィックスが付いた数値を扱い、08 と 09 は有効な 8 進数ではありません。

先頭のゼロを取り除く方法はいくつかありますが、最も便利な方法は、ちょっとした計算を使用することです。単純に値の前に 100 を付けて、モジュラス 100 を取ります (100 で割った余り)。すべての割り当ては、単一の SET /A ステートメントで実行できます。

for /f "tokens=1-4 delims=:.," %%A in ("%time%") do set /a "fhour=100%%A%%100, fmin=100%%B%%100, fsec=100%%C%%100, fcsec=100%%D%%100"
于 2012-08-18T14:44:13.180 に答える
0

%time% に基づいて分割

set time=%time%:
for /f "tokens=1-3,* delims=:" %%k in ("%time%") do (set fhour=%%k) & (set fminute=%%l) & (set fsecfrac=%%m)
for /f "tokens=1-3,* delims=," %%k in ("%fsecfrac%") do (set fsecond=%%k) & (set fmsec=%%l)
于 2012-08-17T17:39:54.840 に答える