在Windows CMD批处理脚本文件名时间戳(Filename timestamp in Wind

2019-06-25 12:17发布

我有一个批处理脚本输出文件,我试图以确保每次执行脚本时,没有现有的文件将被覆盖,所以我试图把一个时间戳就可以了。

目前,我有这样的:

set  stamp=%DATE:/=-%_%TIME::=-%

但是,如果时间是1-9 AM,它提供了类似:

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%再剥离空格。 空白是我原来的问题的问题,真的。

Answer 1:

这段代码的前四行会给你可靠的YY MM DD YYYY HH分秒变量在XP专业版及更高版本,使用WMIC。

@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


Answer 2:

见堆栈溢出问题, 如何获得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%

运行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



Answer 3:

这里有一个批处理脚本我做回一个时间戳。 可以提供可选的第一个参数被用作字段分隔符。 例如:

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%


Answer 4:

在2018-02-08_14.32.06.34.log格式的Windows批处理日志文件名:

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


Answer 5:

它希望在全时间DD-MM-YYYY_HH-MM-SS.TT tt是蜱。 唯一的例外说明了一切。



Answer 6:

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 

编辑:按照布莱斯的非标时间/日期规范。 ( 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


Answer 7:

由于答案堆栈溢出quesion 创建一个文件名作为批作业的时间戳 ,我发现,这是终止文件名的空间。



Answer 8:

在过去,我用一个.cmd脚本我在网上找到。 我恨本地化的方式通常与日期食堂。 任何时候你有文件名中的日期(或其他地方,如果我可以大胆),我想,你希望他们在ISO 8601格式:

2015-02-19T14:54:51Z

还是其他什么东西有YMDHM的顺序,如

2015年2月19日14:54

因为它修复了MDY / DMY歧义,因为它的排序为文本。

我不知道我在哪里得到了。加利福尼亚脚本,但它可能已被http://ss64.com/nt/syntax-getdate.html ,其精美的作品在我的YYYY-MM-DD的Windows 8.1和A M / d / YYYY香草安装Windows 7的两个给出相同的格式:

2015年2月9日04:43



文章来源: Filename timestamp in Windows CMD batch script