%time% 変数を使用するバッチ スクリプトには先頭にゼロが必要です

%time% 変数を使用するバッチ スクリプトには先頭にゼロが必要です

ファイル名に日付と時刻データを使用する DOS スクリプトでバグに遭遇しました。問題は、時間変数が 10 未満の時間に対して先頭のゼロを自動的に提供しなかったため、ギャップが発生してしまうことでした。そのため、> echo %time% を実行すると、「9:29:17.88」が返されます。

これを修正するために、条件付きで先頭のゼロを埋め込む方法を誰か知っていますか?

詳細: ファイル名設定コマンドは次のとおりです:

set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

最終的には次のようになります: C:\Temp\robolog_20100602_ 93208.log (午前 9:23)。

この質問はこれです

ありがとう

答え1

非常に簡単な方法は、先頭のスペースをゼロに置き換えることです。
echo %TIME: =0%
出力は次のようになります。
09:18:53,45

答え2

私の解決策は次のアイデアを使うことでした:

SET HOUR=%TIME:~0,2%
IF "%HOUR:~0,1%" == " " SET HOUR=0%HOUR:~1,1%

答え3

同様のアイデアデニスの答え問題は、 の幅が%time%常に同じであるため、短い文字列を返すのではなく、先頭にスペースが挿入されることです。

これを取り除くには、次の操作を実行しますfor:

for /f "delims= " %x in ("%time%") do set T=0%x

残りはほぼ同じです。

答え4

上記のすべてを実装した最もコンパクトなソリューションとしては、

FOR /F "TOKENS=1-4 DELIMS=/ " %%A IN ("%DATE%") DO FOR /F "TOKENS=1-3 DELIMS=:." %%E IN ("%TIME: =0%") DO SET logfile=C:\Temp\robolog_%%D%%C%%B_%%E%%F%%G.log

スクリプトに新しい行を追加しなくても、ここで動作します。ただし、複数のコマンドによるソリューションよりも洗練されていない可能性があります。

関連情報