生成唯一的文件名与批处理脚本时间戳(Generate unique file name with t

2019-09-02 04:39发布

在我的.bat文件我想要生成基于日期,时间的文件/目录的唯一名称。

Build-2009-10-29-10-59-00

问题是, %TIME%不会做,因为它包含在文件名非法字符(例如: )。

有什么样tr在批处理文件?

任何其他的想法如何解决这个问题(即不从批量解释需要额外的命令行实用程序除外)?

Answer 1:

编辑:这样做的更好的方法是把具有已定义的和不变的格式,而不是使用语言环境定义的那些从一个日期/时间字符串%date%%time% 。 您可以使用以下方法来得到它:

for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined mydate set mydate=%%x

它产生类似20120730203126.530000+120 ,你可以用它来构建你的文件名。


(以下旧答案)

你可以简单地替换为空字符串违规性质:

echo %time::=%

语法%var:str1=str2%需要的环境变量(或伪变量的情况下, %TIME%并取代str1通过str2如果没有遵循等号后面呢。 str1简单删除。

在特定情况下,我想你会希望以下内容:

rem cut off fractional seconds
set t=%time:~0,8%
rem replace colons with dashes
set t=%t::=-%
set FileName=Build-%date%-%t%

更强力的方式的情况下,你不知道是否使用冒号(但时间顺序将是相同的):

set FileName=Build-%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%

前面的所有东西,但是,假设你使用标准ISO 8601的日期格式,我。 即 2009-10-29。 我认为这是正常的简单,但有些人使用其他格式,所以要小心。 但因为你并没有问我是假设你没有有问题存在的日期。



Answer 2:

在@乔伊和@Kees的回答跟进,使他们立即可用。

在命令行:

FOR /f %a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%a
SET DateTime=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%_%DTS:~8,2%-%DTS:~10,2%-%DTS:~12,2%
echo %DateTime%

在一个BAT文件:

@echo off
REM See http://stackoverflow.com/q/1642677/1143274
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a
SET DateTime=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%_%DTS:~8,2%-%DTS:~10,2%-%DTS:~12,2%
echo %DateTime%

示例输出:

2014-10-21_16-28-52


Answer 3:

我用这个批处理文件的执行创建一个唯一的文件名。

REM ****Set up Logging ****
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
set mytime=%mytime: =0%

set Logname="PCCU_%mydate%_%mytime%.log"
Echo.  >>%Logname% 2>>&1
Echo.=================== >>%Logname% 2>>&1

我不得不添加行

set mytime=%mytime: =0%

因为我有一个地方是空白的被前上午10点进入了同样的问题,现在我得到的09,而不是9,我还重用了,我这个脚本创建其他文件%指明MyDate%和%数值指明MyTime%变量,使它们都具有同日时间戳。



Answer 4:

这个程序,实际上只有一条线,每一个系统设置为任何日期或时间格式适用于。
线1的输出是在格式20140725095527.710000 + 120

你需要实际的日期/时间格式在第2行确定的,但是你想你可以对其进行格式化。
刚刚得到的日期时间变量添加到您的文件名,即。 Filename_%的DateTime%.LOG

::=======================================================================
::== CREATE UNIQUE DateTime STRING IN FORMAT YYYYMMDD-HHMMSS
::=======================================================================
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a

SET DateTime=%DTS:~0,8%-%DTS:~8,6% | REM OUTPUT = 20140725-095527


Answer 5:

我做了这个普遍的,在任何环境中的日期格式可能不同会工作。

echo off
if not exist "C:\SWLOG\" mkdir C:\SWLOG
cd C:\SWLOG\
cmd /c "powershell get-date -format ^"{yyyyMMdd-HHmmss}^""> result.txt
REM echo %time% > result.txt
type result.txt > result1.txt
set /p filename=<result1.txt
echo %filename%
del C:\SWLOG\result.txt
del C:\SWLOG\result1.txt


Answer 6:

要在前面的例子中工作的代码,我需要稍微调整。 我相信这是因为我的电脑是使用英国的日期格式。 要回到“2014年4月19日” MyDate中我需要:

For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)

下面,我贴我的总脚本,包括如何使用文件名的例子

For /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%b-%%a)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
set mytime=%mytime: =0%

set Logname="c:\temp\LogFiles\MyLogFile_%mydate%_%mytime%.log"
Robocopy  \\sourceserver\Music H:\MyBackups\Music /MIR /FFT /Z /XA:H /W:5 /np /fp /dcopy:T /unilog:%Logname% /tee 

希望这可以帮助!



Answer 7:

如果你能保证该机拥有的Python安装它,一个特定版本访问系统的PATH ,您可以使用此解决方案:

FOR /F "tokens=* USEBACKQ" %%F IN (`python -c "import datetime; print 
datetime.datetime.now().replace(microsecond=0).isoformat().replace(':', '-')"`) DO (
SET TIMESTAMP=%%F
)
ECHO %TIMESTAMP%

这将使当前的本地ISO-8601 (ISH)日表示成%TIMESTAMP%变量和echo出来,像这样:

2017-05-25T14:54:37

我已经把replace(':', '-')isoformat()这样得到的字符串可以在文件名或目录被使用,因为:在Windows文件系统中被禁止的字符。



文章来源: Generate unique file name with timestamp in batch script