在Windows (Windows XP)批处理脚本中,我需要格式化当前日期和时间,以便以后在文件名等中使用。

这类似于堆栈溢出问题如何在批处理文件中添加日期,但也包含时间。

到目前为止,我有这个:

echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%

这使:

28/07/2009
 8:35:31.01
2009_07_28__ 8_36_01

是否有一种方法可以允许%TIME%中的个位数小时,以便我可以得到以下结果?

2009_07_28__08_36_01

当前回答

Windows中SET命令支持的offset:length格式将不允许您填充您似乎感兴趣的0。

但是,您可以编写一个BATCH脚本来检查小时是否小于10和 相应地用不同的回声字符串进行填充。

您将在此链接中找到关于SET命令的一些信息。


您还可以更改其他编程方法以达到此目的。

在unix bash (Windows上的Cygwin可用)中,只需说,

date +%Y_%m_%d__%H_%M_%S

它总是正确地填充。

其他回答

Windows中SET命令支持的offset:length格式将不允许您填充您似乎感兴趣的0。

但是,您可以编写一个BATCH脚本来检查小时是否小于10和 相应地用不同的回声字符串进行填充。

您将在此链接中找到关于SET命令的一些信息。


您还可以更改其他编程方法以达到此目的。

在unix bash (Windows上的Cygwin可用)中,只需说,

date +%Y_%m_%d__%H_%M_%S

它总是正确地填充。

我真的是批处理文件的新手,这是我的代码!!(我不知道为什么,但我不能结合日期/t和时间/t在一起,我不能直接使用%date%和%time%没有变量…)

@ECHO OFF
set ldt=%date% %time%
echo %ldt%>> logs.txt
EXIT

它在某种程度上是从其他人那里重用的(问题是获得一个格式化的时间作为文件名)。

创建一个名为“search_files.bat”的文件,并将下面的内容放入该文件中。然后双击它。临时的%THH%变量被放置在适当的位置来处理AM。如果时间的前两位数字为0,Windows将忽略LOG文件的其余文件名。

CD .
SET THH=%time:~0,2%
SET THH=%THH: =0%
dir /s /b *.* > %date:~10,4%-%date:~4,2%-%date:~7,2%@%THH%.%time:~3,2%.%time:~6,2%.LOG

以下可能不是一个直接的答案,但一个接近的答案?

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__0%time:~1,2%_%time:~3,2%_%time:~6,2%
else set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%

至少这可能是鼓舞人心的。

这是我对adatetime字符串的2美分。在MM DD YYYY系统上切换第一个和第二个%DATE:~条目。

    REM ====================================================================================
    REM CREATE UNIQUE DATETIME STRING FOR ADDING TO FILENAME
    REM ====================================================================================
    REM Can handle dd DDxMMxYYYY and DDxMMxYYYY > CREATES YYYYMMDDHHMMSS (x= any character)
    REM ====================================================================================
    REM CHECK for SHORTDATE dd DDxMMxYYYY 
    IF "%DATE:~0,1%" GTR "3" (
        SET DATETIME=%DATE:~9,4%%DATE:~6,2%%DATE:~3,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
    ) ELSE (
    REM ASSUMES SHORTDATE DDxMMxYYYY
        SET DATETIME=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
        )
    REM CORRECT FOR HOURS BELOW 10
    IF %DATETIME:~8,2% LSS 10 SET DATETIME=%DATETIME:~0,8%0%DATETIME:~9,5%
    ECHO %DATETIME%