如何创建批处理命令以 UTC 时间创建 .zip 文件名

问题描述 投票:0回答:2

我们如何以 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

回声完成!

如果有人有想法,请帮忙。

batch-file
2个回答
0
投票

试试这个:

@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!
  • 不要覆盖 DATE 和 TIME,它们是环境变量。
  • 使用内联 powershell 以您的格式获取 3 小时前的 UTC 日期和时间。

0
投票

获取 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 /?
© www.soinside.com 2019 - 2024. All rights reserved.