1

我在批处理文件中有以下内容。

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

dir *.* > logfile_%timefmt%.log

这在上午 10 点之后完美运行,但提前失败,因为它在时间戳中添加了一个空格而不是前导 0。

在 MS-DOS 中有没有办法创建一个带有前导 0 的时间戳?我更喜欢使用相当标准的命令,这样它就可以从 Windows XP 开始工作。

4

4 回答 4

6

最好先获取一次时间,然后再解析元素。第三行将用 0 替换空格

set timefmt=%time%
set timefmt=%TIMEFMT:~0,2%%TIMEFMT:~3,2%%TIMEFMT:~6,2%
set timefmt=%TIMEFMT: =0%
dir *.* > logfile_%timefmt%.log
于 2013-05-21T07:34:21.187 回答
1

我也遇到了这个问题,但是我有不同区域设置的计算机(有些显示日期为 yyyy-mm-dd,有些显示为 mm/dd/yyyy)。有些显示上午和下午的 12 小时制,另一些显示 24 小时制...

...所以我最终组装了一个用于将当前日期/时间戳保存在环境变量中的工具。实际上,该工具只是打印出时间戳,但有一个如何将其放入环境变量的示例:

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

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

于 2014-02-20T05:59:53.397 回答
1

在批处理作业中创建文件名作为时间戳可以解决与此问题相近的问题。我在此处插入此评论是因为谷歌首先提出了这个答案,以便赶时间的用户可能会错过另一个线程。

于 2014-03-18T11:24:17.270 回答
1

我也有这个问题。
所以我这样做了。这让我克服了障碍。

:STEP_DATESTAMP
::
REM 将日期戳设置为 YYYYMMDD
设置 v_datestampYYYY=%date:~6,4%
设置 v_datestampMM=%date:~3,2%
设置 v_datestampDD=%date:~0,2%
设置 v_datestamp=%v_datestampYYYY%%v_datestampMM %%v_datestampDD%
::
REM 将时间戳设置为 HHMMSS
设置 HH=%time:~0,2%
:: 如果 %HH%==0 设置,则确保小时始终为 2 位
设置 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 设置 HH=07
如果 %HH%==8 设置 HH=08
if %HH%==9 设置 HH=09
设置 MM=%time:~3,2%
设置 SS=%time:~6,2%
设置 v_timestamp=%HH%-%MM%-%SS%

于 2014-03-21T15:49:35.673 回答