Raj*_*ore 67 windows command-line cmd batch-file
我在命令行上使用WinZip压缩文件.由于我们每天都会存档,因此我尝试为这些文件添加日期和时间,以便每次都自动生成一个新文件.
我使用以下命令生成文件名.将其粘贴到命令行,您应该看到一个带有日期和时间组件的文件名.
echo Archive_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.zip
Run Code Online (Sandbox Code Playgroud)
产量
Archive_20111011_ 93609.zip
Run Code Online (Sandbox Code Playgroud)
但是,我的问题是AM vs PM.AM时间戳给我时间9
(带有前导空格)与10
自然占据两个空格.
我想我的问题将延续到头九天,前九个月等等.
我如何解决这个问题,以便包含前导零而不是前导空格,所以我得到了Archive_20111011_093609.zip
?
Ste*_*han 63
另一种方案:
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
Run Code Online (Sandbox Code Playgroud)
它会给你(独立于区域设置!):
20130802203023.304000+120
( YYYYMMDDhhmmss.<milliseconds><always 000>+/-<timedifference to UTC> )
Run Code Online (Sandbox Code Playgroud)
从这里开始,很容易:
set datetime=%datetime:~0,8%-%datetime:~8,6%
20130802-203023
Run Code Online (Sandbox Code Playgroud)
对于Logan对文件的"日期时间修改"的相同输出格式的请求:
for %%F in (test.txt) do set file=%%~fF
for /f "tokens=2 delims==" %%I in ('wmic datafile where name^="%file:\=\\%" get lastmodified /format:list') do set datetime=%%I
echo %datetime%
Run Code Online (Sandbox Code Playgroud)
它有点复杂,因为它只适用于完整路径,wmic
期望反斜杠加倍并且=
必须转义(第一个.第二个受周围引号保护).
Ale*_* K. 55
提取小时,寻找前导空格,如果发现替换为零;
set hr=%time:~0,2%
if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%
echo Archive_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%.zip
Run Code Online (Sandbox Code Playgroud)
小智 20
你应该搜索; 你可以简单地将所有空格替换为零
set hr=%hr: =0%
- jeb 2011年 10月11日14:16
所以我做了:
set hr=%time:~0,2%
set hr=%hr: =0%
Run Code Online (Sandbox Code Playgroud)
然后%hr%
在你正在格式化的任何字符串里面使用,总是得到一个两位数的小时.
(Jeb在最受欢迎的答案下的评论对我来说是最好的,也是最简单的.我在此重新发布,以便为未来的用户提供更明显的答案.)
PA.*_*PA. 15
正如Vicky已经指出的那样,%DATE%
并%TIME%
使用完全(无限)可自定义的短日期和时间格式返回当前日期和时间.
一个用户可以将其系统配置为返回Fri040811 08.03PM,而另一个用户可以选择08/04/2011 20:30.
对于BAT程序员来说,这是一场彻底的噩梦.
如果在退出BAT文件之前还原以前的格式,则将格式更改为固定格式可能会解决问题.但它可能会受到令人讨厌的竞争条件的影响,并且取消了BAT文件中的恢复.
幸运的是,还有另一种选择.
您可以使用WMIC.WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table
以不变的方式返回日期和时间.使用FOR /F
命令直接解析它非常方便.
所以,把这些碎片放在一起,试试这个作为起点......
SETLOCAL enabledelayedexpansion
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
SET /A FD=%%F*1000000+%%D*100+%%A
SET /A FT=10000+%%B*100+%%C
SET FT=!FT:~-4!
ECHO Archive_!FD!_!FT!.zip
)
Run Code Online (Sandbox Code Playgroud)
Nes*_*sar 11
在阅读完所有答案后,我找到了最适合我的解决方案:
set t=%date%_%time%
set d=%t:~10,4%%t:~7,2%%t:~4,2%_%t:~15,2%%t:~18,2%%t:~21,2%
echo hello>"Archive_%d%"
Run Code Online (Sandbox Code Playgroud)
如果我得到20160915_ 150101
(带领先的空间和时间).
如果PM我得到20160915_2150101
.
小智 5
@For /F "tokens=1,2,3,4 delims=/ " %%A in ('Date /t') do @(
Set DayW=%%A
Set Day=%%B
Set Month=%%C
Set Year=%%D
Set All=%%D%%B%%C
)
"C:\Windows\CWBZIP.EXE" "c:\transfer\ziptest%All%.zip" "C:\transfer\MB5L.txt"
Run Code Online (Sandbox Code Playgroud)
如果在 2012 年 2 月 4 日运行,则需要 MB5L.txt 并将其压缩为 ziptest20120204.zip
归档时间: |
|
查看次数: |
254954 次 |
最近记录: |