Ang*_*ker 44 windows batch-file
我在批处理文件中有以下行(在旧的Windows 2000机器上运行):
7z a QuickBackup.zip *.backup
Run Code Online (Sandbox Code Playgroud)
如何将日期附加到QuickBackup.zip文件中.因此,如果我今天运行批处理文件,理想情况下,该文件将是QuickBackup20090514.zip.
有没有办法做到这一点?
Chr*_*ris 57
Bernhard的回答需要一些调整工作,因为%DATE%环境变量采用不同的格式(如其他地方所述).此外,还有一个波浪号(〜)缺失.
代替:
set backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:0,2%
我不得不使用:
set backupFilename=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
对于日期格式:
c:\ Scripts> echo%DATE%
星期四05/14/2009
Ber*_*ann 13
这适用于非美国日期格式(dd/MM/yyyy):
set backupFilename=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
7z a QuickBackup%backupFilename%.zip *.backup
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 12
如果您知道您的区域设置不会改变,您可以按如下方式进行:
如果您的短日期格式是dd/MM/yyyy:
SET MYDATE =%DATE:~3,2 %% DATE:~0.2 %% DATE:~8,4%
如果您的短日期格式是MM/dd/yyyy:
SET MYDATE =%DATE:〜0,2 %% DATE:~3,2 %% DATE:~8,4%
但是没有一般的方法可以独立于您的区域设置.
我不建议依赖区域设置来处理将在生产环境中使用的任何内容. 相反,你应该考虑使用另一种脚本语言 - PowerShell,VBScript,......
例如,如果在与批处理文件相同的目录中创建VBS文件yyyymmdd.vbs,则包含以下内容:
' yyyymmdd.vbs - outputs the current date in the format yyyymmdd
Function Pad(Value, PadCharacter, Length)
Pad = Right(String(Length,PadCharacter) & Value, Length)
End Function
Dim Today
Today = Date
WScript.Echo Pad(Year(Today), "0", 4) & Pad(Month(Today), "0", 2) & Pad(Day(Today), "0", 2)
Run Code Online (Sandbox Code Playgroud)
然后你就可以从你的批处理文件中调用它了:
FOR /F %%i IN ('cscript "%~dp0yyyymmdd.vbs" //Nologo') do SET MYDATE=%%i
echo %MYDATE%
Run Code Online (Sandbox Code Playgroud)
当然,最终会出现这样的情况:用更强大的脚本语言重写批处理文件比用这种方式将它与VBScript混合更有意义.
@SETLOCAL ENABLEDELAYEDEXPANSION
@REM Use WMIC to retrieve date and time
@echo off
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF NOT "%%~F"=="" (
SET /A SortDate = 10000 * %%F + 100 * %%D + %%A
set YEAR=!SortDate:~0,4!
set MON=!SortDate:~4,2!
set DAY=!SortDate:~6,2!
@REM Add 1000000 so as to force a prepended 0 if hours less than 10
SET /A SortTime = 1000000 + 10000 * %%B + 100 * %%C + %%E
set HOUR=!SortTime:~1,2!
set MIN=!SortTime:~3,2!
set SEC=!SortTime:~5,2!
)
)
@echo on
@echo DATE=%DATE%, TIME=%TIME%
@echo HOUR=!HOUR! MIN=!MIN! SEC=!SEC!
@echo YR=!YEAR! MON=!MON! DAY=!DAY!
@echo DATECODE= '!YEAR!!MON!!DAY!!HOUR!!MIN!'
Run Code Online (Sandbox Code Playgroud)
输出:
DATE=2015-05-20, TIME= 1:30:38.59
HOUR=01 MIN=30 SEC=38
YR=2015 MON=05 DAY=20
DATECODE= '201505200130'
Run Code Online (Sandbox Code Playgroud)
您还可以通过变量访问日期 %DATE%
测试我的系统时%DATE%产生ddd dd/mm/yyyy
您可以使用子字符串运算符来生成所需的格式
即.在MON 11/12/2018上使用美国区域设置运行以下命令
%DATE:~3,3% %DATE:~0,3% %DATE:~7,2%
Run Code Online (Sandbox Code Playgroud)
会产生一个输出:
11 Mon 12
Run Code Online (Sandbox Code Playgroud)
子串参数是
%*variable*:~*startpos*,*numberofchars*%