Windows CMD批处理脚本中的文件名时间戳

bry*_*ryc 22 windows cmd batch-file

我有一个输出文件的批处理脚本,我试图确保每次执行脚本时,都不会覆盖现有文件,所以我试图在其上添加时间戳.

目前我有这个:

set  stamp=%DATE:/=-%_%TIME::=-%
Run Code Online (Sandbox Code Playgroud)

但如果时间是1-9 AM,它会给出类似的结果:

13-06-2012_ instead of a full 13-06-2012_12-39-37.28
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

我正在使用Windows 7,并且echo %date% %time%命令行窗口中的输出是(我的'短日期'时钟格式设置为显示3个字母的月份):

03-Sep-12 9:06:21.54
Run Code Online (Sandbox Code Playgroud)

编辑:我现在一直使用以下时间戳,效果很好.

set timestamp=%DATE:/=-%_%TIME::=-%
set timestamp=%timestamp: =%
Run Code Online (Sandbox Code Playgroud)

它产生像时间戳:18-03-2013_13-37-43.26,通过更换/:%TIME%%DATE%,然后剥离空格.在我原来的问题中,空白是问题,真的.

fox*_*ive 28

使用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
Run Code Online (Sandbox Code Playgroud)


Nic*_*zza 11

请参阅堆栈溢出问题如何在Windows命令行上以适当的格式获取当前日期时间以使用文件名?.

创建一个文件,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%
Run Code Online (Sandbox Code Playgroud)

运行date.bat:

C:\>date.bat
2012-06-14_12-47-PM
Run Code Online (Sandbox Code Playgroud)

更新:

你也可以这样做一行:

for /f "tokens=2-8 delims=.:/ " %%a in ("%date% %time%") do set DateNtime=%%c-%%a-%%b_%%d-%%e-%%f.%%g

  • 为什么不在一条线上完成所有工作呢?`for/f"tokens = 2-8 delims =.:/"%% a in("%date %% time%")do set DateNtime = %% c - %% a - %% b _ %% d-% %e - %% f.%% g`此示例使用24小时时钟而不是12小时+上午/下午,并包括毫秒.如果你不想要毫秒,那就不要使用`%% g`. (2认同)

kap*_*apu 5

这是我为返回时间戳而制作的批处理脚本。可以提供可选的第一个参数以用作字段分隔符。例如:

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%
Run Code Online (Sandbox Code Playgroud)


bry*_*ryc 2

感谢Stack Overflow 问题在批处理作业中创建文件名作为时间戳的回答,我发现这是一个终止文件名的空格。