我遇到了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%"