2013-05-21 67 views
0

我在批处理文件中具有以下内容。文件名中的MS-DOS时间戳

set timefmt=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2% 

dir *.* > logfile_%timefmt%.log 

这工作上午10时后完美,而是因为它增加了一个空间,时间戳,而不是0领先

手之前失败是否有MS-DOS方式创建一个带有时间戳领先0? 我宁愿使用相当标准的命令,以便它可以在Windows XP之后运行。

回答

4

最好先抽出时间再分析元素。 第三行将具有0

set timefmt=%time% 
set timefmt=%TIMEFMT:~0,2%%TIMEFMT:~3,2%%TIMEFMT:~6,2% 
set timefmt=%TIMEFMT: =0% 
dir *.* > logfile_%timefmt%.log 
+0

点指出这样做的字符串操作之前,首先抓的时间。这是所有语言的最佳做法。 – ChrisGuest

1

我有这个问题太替换的空间中,但我有不同的区域设置的计算机(一些显示YYYY-MM-DD的日期,某些毫米/日/年) 。一些显示12小时的AM和PM,其他24小时的时钟...

...所以我结束在一起a tool for saving the current date/timestamp in an environment variable。事实上,该工具会打印出时间戳,但如何把它变成一个环境变量的例子:

for /f %%x in ('@timestamp.exe') do set TIMESTAMP=%%x 

...然后你只需要使用%TIMESTAMP%在任何你想要的方式。

0

我也有这个问题。
所以我做到了。这让我越过了障碍。

:STEP_DATESTAMP
::
REM设置邮戳到年月日
集v_datestampYYYY =%日期:〜6,4%
集v_datestampMM =%日期:〜3,2%
集v_datestampDD =%日期:〜0.2%
集v_datestamp =%v_datestampYYYY %% v_datestampMM %% v_datestampDD%
::
REM设置时间戳HHMMSS
集HH =%的时间:〜0.2%
:: EN确保小时总是2个位数
如果%HH%== 0组HH = 00
如果%HH%== 1组HH = 01
如果%HH%== 2组HH = 02
如果% HH%== 3组HH = 03
如果%HH%== 4组HH = 04
如果%HH%== 5组HH = 05
如果%HH%== 6组HH = 06
如果%HH%== 7 set HH = 07
if%HH%== 8 set HH = 08
if HH%== 9 set HH = 09
set MM =%time:〜3.2%
set S S =%的时间:〜6.2%
集v_timestamp =%HH% - %MM% - %SS%