1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT(ドス・バット

システム時間抽出のためのBATバッチコード(バグ修正)

2022-01-08 14:37:57

通常、以下のコードは動作しますが、バッチ処理で0から始まるデフォルトの数字が8進数とみなされ、不正確な時刻が表示されます。

for /f "tokens=1,2 delims=:" %%i in ('time/t') do (
	set/a xiaos=%%i
	set/a fenz=%%j
)

上記のコードを使用して、もともとシステムの時間と分を抽出するために、次のように実行しました。
xiaos=9
フェンツ=18
しかし、今日は以下のような形式で抽出されています(同じマシン、同じシステム)。
xiaos=09
フェンツ=18
このため、後の計算に誤差が生じます。

長い間、バッチ処理に触れていなかったので、何が悪かったのかわかりません。アドバイスをお願いします。

bathomeの管理人からの回答

@echo off
for /f "tokens=1,2 delims=:" %%i in ('time /t') do (
    set xiaos=%%i
    set fenz=%%j
)
set xiaos=10%xiaos: =%
set fenz=10%fenz%
set /a xiaos=xiaos%%%100
set /a fenz=fenz%%100
echo %xiaos%
echo %fenz%
pause

完璧な解決策

問題が見つかりました。日付と時刻の書式は03,09です。数値計算や代入をすると、0から始まるので8進数とみなされ、08,09となると四捨五入が必要なので、エラーになる。そして07以下は丸める必要がないのでエラーにならない。