Ass*_*vie 37 windows filenames timestamp batch-file
在我的.bat文件中,我想基于日期时间为文件/目录生成唯一的名称.
例如
Build-2009-10-29-10-59-00
Run Code Online (Sandbox Code Playgroud)
问题是%TIME%不会这样做,因为它包含文件名中非法的字符(例如:).
tr批处理文件中有类似的东西吗?
任何其他想法如何解决这个问题(除了批处理解释器之外不需要额外的命令行实用程序)?
Joe*_*oey 43
编辑:更好的方法是采用具有已定义和不变格式的日期/时间字符串,而不是使用来自%date%和的语言环境定义的字符串%time%.您可以使用以下内容来获取它:
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined mydate set mydate=%%x
Run Code Online (Sandbox Code Playgroud)
它产生类似的东西20120730203126.530000+120,您可以使用它来构建您的文件名.
(旧答案如下)
您可以简单地用空字符串替换有问题的字符:
echo %time::=%
Run Code Online (Sandbox Code Playgroud)
语法%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%
Run Code Online (Sandbox Code Playgroud)
如果您不知道是否使用冒号(但时间顺序相同),则采用更强力的方式:
set FileName=Build-%date%-%time:~0,2%-%time:~3,2%-%time:~6,2%
Run Code Online (Sandbox Code Playgroud)
但是,所有前面的内容都假设您使用标准的ISO 8601日期格式,即.即 2009-10-29.我认为这很正常,但有些人使用其他格式,所以要小心.但既然你没有问我假设你没有问题的日期.
Evg*_*eev 17
跟进@ Joey和@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%
Run Code Online (Sandbox Code Playgroud)
在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%
Run Code Online (Sandbox Code Playgroud)
示例输出:
2014-10-21_16-28-52
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72917 次 |
| 最近记录: |