我们如何以 UTC 时间或当前时间 (-) 减去现有时间 3 小时来创建 zip 文件。
我使用的命令粘贴如下:
echo on
for /f "tokens=3,2,4 delims=/- " %%x in ("%date%") do set d=%%z%%x_%%y
set date=%d%
for /f "tokens=1,2,3 delims=:. " %%x in ("%time%") do set t=%%x%%y%%z
set time=%t%
Echo zipping...
"C:\Program Files\7-Zip\7z.exe" a -tzip "C:\DFD\JZR_%d%%t%.zip" "C:\DFD\*.txt"
del“C:\DFD*.txt”/s /f /q
回声完成!
如果有人有想法,请帮忙。
试试这个:
@echo off & for /f "usebackq tokens=* delims= " %%a in (`%windir%\system32\windowspowershell\v1.0\powershell.exe -noprofile -command "& {(Get-Date).ToUniversalTime().AddHours(-3).ToString('yyyyMM_dd')}`) do set "d=%%a"
for /f "usebackq tokens=* delims= " %%a in (`%windir%\system32\windowspowershell\v1.0\powershell.exe -noprofile -command "& {(Get-Date).ToUniversalTime().AddHours(-3).ToString('hhmmss')}"`) do set "t=%%a"
echo Zipping.... & "C:\Program Files\7-Zip\7z.exe" a -tzip "C:\DFD\JZR_%d%%t%.zip" "C:\DFD\*.txt" & del /q /f /s "C:\DFD*.txt" & echo Done!
获取 UTC 时间的一种可能的解决方案是使用 WMIC:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "tokens=1* delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe PATH Win32_UTCTime GET /VALUE') do if not "%%J" == "" set "%%I=%%J"
rem Insert a leading 0 if one of the two digit values has just one digit.
if "%Month:~1%" == "" set "Month=0%Month%"
if "%Day:~1%" == "" set "Day=0%Day%"
if "%Hour:~1%" == "" set "Hour=0%Hour%"
if "%Minute:~1%" == "" set "Minute=0%Minute%"
if "%Second:~1%" == "" set "Second=0%Second%"
rem Use the date/time values in format yyyy-MM-dd_hh_mm_ss in ZIP file name.
"%ProgramFiles%\7-Zip\7z.exe" a -tzip "C:\DFD\JZR_%Year%-%Month%-%Day%_%Hour%_%Minute%_%Second%.zip" "C:\DFD\*.txt"
endlocal
请在命令提示符窗口中运行一次
wmic path win32_utctime get /value
,查看 WMIC 以 Unicode 输出的内容,其中 UTF-16 LE 编码通过 cmd.exe
转换为需要 IF 条件的 ASCII 编码。有关使用 IF 条件在此处解决的字符编码转换问题的详细信息,请参阅我的答案 如何删除批处理文件中的新行?。
也可以用作第三行:
for /F "tokens=1* delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe PATH Win32_UTCTime GET Day^,Month^,Year^,Hour^,Minute^,Second /VALUE') do if not "%%J" == "" set "%%I=%%J"
然后,WMIC 将仅输出感兴趣的六个日期/时间值,其中每个逗号左侧的字符
^
是必要的,以便将命令行(逗号正确)传递到在后台启动的命令进程,该进程执行 WMIC 命令,即在后台执行:
C:\Windows\System32\cmd.exe /c C:\Windows\System32\wbem\wmic.exe PATH Win32_UTCTime GET Day,Month,Year,Hour,Minute,Second /VALUE
逗号将被
cmd.exe
处理批处理文件解释为命令集 FOR 内的参数分隔符,并将用空格字符替换每个 ,
,这将使 WMIC 命令无效。
要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?
wmic /?
wmic path /?
wmic path win32_utctime /?
wmic path win32_utctime get /?