需要使用%time%variables的批处理脚本前导零

我遇到了DOS脚本中的一个错误,它使用文件命名的date和时间数据。 问题是我结束了一个差距,因为时间variables不会自动提供小时<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)。

这个问题与这个有关。

谢谢

类似的想法丹尼斯的答案 。 问题是%time%的宽度总是相同的,所以它在开始处插入一个空格而不是返回一个较短的string。

你可以用下面的方法去掉它:

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

那么剩下的就差不多了。

一个非常简单的方法是用零replace前导空间:
echo %TIME: =0%
输出:
09:18:53,45

我的解决scheme是使用以下的想法:

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

使用Jesse的贡献,我刚刚创build了一个修改后的输出的variables。 然后我引用该variables来构build小时部分。

 set NantTime=%time: =0% nant\bin\nant.exe -nologo+ -debug+ -verbose+ -D:project.config=debug /f:build\default.build -l:logs\architect-build-%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%NantTime:~0,2%-%time:~3,2%-%time:~6,2%.log pause 

与原始来源:

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

谢谢Jesse。 我会投票,如果我有信誉点。

对于实现上述所有内容的最紧凑的解决scheme,我认为

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

会在这里工作,而不会在脚本中添加任何新行。 虽然这可能不如多个命令解决scheme的优雅。

以下是几行,但清晰易懂。 它保存stdout和stderr来分隔文件,每个文件都有一个时间戳。 时间戳包括年份,月份,date,小时,分钟和秒钟。 时间戳应始终具有最重要的date组件(年)和最less的组件(秒)最后。 这使文件列表按时间顺序。 毫不迟疑,这是我的解决scheme。

 :prepare time stamp set year=%date:~10,4% set month=%date:~4,2% set day=%date:~7,2% set hour=%time:~0,2% :replace leading space with 0 for hours < 10 if "%hour:~0,1%" == " " set hour=0%hour:~1,1% set minute=%time:~3,2% set second=%time:~6,2% set timeStamp=%year%.%month%.%day%_%hour%.%minute%.%second% :run the program ProgramName.pl 1> RunLogs\out.%timeStamp% ^ 2> RunLogs\err.%timeStamp% 

这在时间的开始时间为零,并且以小时的最后两位数字(分钟和秒开始位置被移位一)。 因此,上午3点变成“03”,然后“03”,小时15变成“015”,然后“15”。

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

较less阅读:

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

一行代码将做你所需要的:

  IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7% 

例如,我使用%Date%,然后将一个前导零添加到我用来确定是否需要用%Time%的零replace前导空格的variables。

  ::Prepare TimeStamp variable by replacing leading space with 0 for Hours < 10 SET TimeStamp=%Time:~0,8% IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7% Echo Started on %Date$ at %TimeStamp% :: Insert what you are doing here... SET TimeStamp=%Time:~0,8% IF "%Time:~0,1%" == " " SET TimeStamp=0%Time:~1,7% ECHO Finished on %Date% at %TimeStamp% 
 set sFolderName=%time: =0% xcopy "%UserProfile%\Pictures\*.jpg" Y:\"%DATE%-%sFolderName:~0,2%h%time:~3,2%m%time:~6,2%s-%random%" /I /C /Y 15.06.2015-03h43m34s-5357 5357-%random%"