我有一个输出文件的批处理脚本,我试图确保每次执行脚本时都不会覆盖现有文件,所以我试图在其上加上时间戳。
目前我有这个:
set stamp=%DATE:/=-%_%TIME::=-%
但如果时间是上午1点到9点,它会给出类似的结果:
13-06-2012_ instead of a full 13-06-2012_12-39-37.28
我该如何解决这个问题?
我使用的是Windows 7,命令行窗口中echo %date% %time%
的输出是(我的'短日期'时钟格式设置为显示3个字母的月份):
03-Sep-12 9:06:21.54
修改:我现在一直使用以下时间戳,效果很好。
set timestamp=%DATE:/=-%_%TIME::=-%
set timestamp=%timestamp: =%
它通过替换18-03-2013_13-37-43.26
和/
中的:
和%TIME%
,然后剥离空格来生成类似于%DATE%
的时间戳。原始问题中的空白是真的。
答案 0 :(得分:18)
此代码的前四行将使用WMIC为您提供XP Pro及更高版本中可靠的YY DD MM YYYY HH Min Sec变量。
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
答案 1 :(得分:10)
请参阅Stack Overflow问题 How to get current datetime on Windows command line, in a suitable format for using in a filename? 。
创建文件date.bat
:
@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-3 delims=/:/ " %%a in ('time /t') do (set mytime=%%a-%%b-%%c)
set mytime=%mytime: =%
echo %mydate%_%mytime%
运行date.bat
:
C:\>date.bat
2012-06-14_12-47-PM
更新:
你也可以这样做一行:
for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g
答案 2 :(得分:2)
Here's a batch script I made to return a timestamp. An optional first argument may be provided to be used as a field delimiter. For example:
c:\sys\tmp>timestamp.bat
20160404_144741
c:\sys\tmp>timestamp.bat -
2016-04-04_14-45-25
c:\sys\tmp>timestamp.bat :
2016:04:04_14:45:29
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: put your desired field delimiter here.
:: for example, setting DELIMITER to a hyphen will separate fields like so:
:: yyyy-MM-dd_hh-mm-ss
::
:: setting DELIMITER to nothing will output like so:
:: yyyyMMdd_hhmmss
::
SET DELIMITER=%1
SET DATESTRING=%date:~-4,4%%DELIMITER%%date:~-7,2%%DELIMITER%%date:~-10,2%
SET TIMESTRING=%TIME%
::TRIM OFF the LAST 3 characters of TIMESTRING, which is the decimal point and hundredths of a second
set TIMESTRING=%TIMESTRING:~0,-3%
:: Replace colons from TIMESTRING with DELIMITER
SET TIMESTRING=%TIMESTRING::=!DELIMITER!%
:: if there is a preceeding space substitute with a zero
echo %DATESTRING%_%TIMESTRING: =0%
答案 3 :(得分:1)
Windows批处理日志文件名称为2018-02-08_14.32.06.34.log格式:
setlocal
set d=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%
set t=%time::=.%
set t=%t: =%
set logfile="%d%_%t%.log"
ping localhost -n 11>%1/%logfile%
endlocal
答案 4 :(得分:0)
它想要DD-MM-YYYY_HH-MM-SS.TT
中的全职时间,其中TT是滴答声。这个例外说明了一切。
答案 5 :(得分:0)
感谢an answer to Stack Overflow quesion Creating a file name as a timestamp in a batch job,我发现它是一个终止文件名的空间。
答案 6 :(得分:0)
for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time: =0%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g
echo %DateNtime%
或者,从命令行:
for /f "tokens=2-8 delims=.:/ " %a in ("%date% %time: =0%") do echo %c-%a-%b_%d-%e-%f.%g
编辑:根据bryce的非标准时间/日期规格。 (03-Sep-12 9:06:21.54
)
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-7 delims=.:/- " %%a in ("%date% %time%") do (
if "%%b"=="Jan" set MM=01
if "%%b"=="Feb" set MM=02
if "%%b"=="Mar" set MM=03
if "%%b"=="Apr" set MM=04
if "%%b"=="May" set MM=05
if "%%b"=="Jun" set MM=06
if "%%b"=="Jul" set MM=07
if "%%b"=="Aug" set MM=08
if "%%b"=="Sep" set MM=09
if "%%b"=="Oct" set MM=10
if "%%b"=="Nov" set MM=11
if "%%b"=="Dec" set MM=12
set HH=0%%d
set HH=!HH:~-2!
echo 20%%c-!MM!-%%a_!HH!-%%e-%%f.%%g
)
endlocal
答案 7 :(得分:0)
过去,我使用过我在互联网上找到的.cmd脚本。我讨厌本地化通常与日期混淆的方式。任何时候你有文件名中的日期(或其他任何地方,如果我可能这么大胆)我想你想要它们的ISO 8601格式:
2015-02-19T14:54:51Z
或按此顺序具有Y M D H M的其他内容,例如
2015-02-19 14:54
因为它修复了MDY / DMY歧义,并且因为它可以作为文本进行排序。
我不知道我在哪里获得.cmd脚本,但它可能是http://ss64.com/nt/syntax-getdate.html,它可以在我的YYYY-MM-DD Windows 8.1和M / D / YYYY香草上很好地工作安装Windows 7.两者都给出相同的格式:
2015-02-09 04:43
答案 8 :(得分:0)
BATCH / CMD文件,例如 DateAndTime.cmd (不在CMD控制台中)
代码:
SETLOCAL EnableDelayedExpansion
(set d=%date:~8,2%-%date:~3,2%-%date:~0,2%) & (set t=%time::=.%) & (set t=!t: =0!) & (set STAMP=!d!__!t!)
创建输出:
echo %stamp%
输出:
2020-02-25__08.43.38.90
或者也可以用于CMD-Console和BATCH / CMD文件中的行
set d=%date:~6,4%-%date:~3,2%-%date:~0,2%
set t=%time::=.%
set t=%t: =0%
set stamp=%d%__%t%
“创建输出”和“输出”与上面相同