我正在创建一个批处理文件来运行一些备份。但是,当我尝试给文件一个名称与当前日期时间它给出了一个奇怪的结果。批处理文件输出日期时间
我使用:
backup.backup_%DATE:~10,4%%DATE:~7,2%%DATE:~4,2%_%time:~0,2%%time:~3,2%%time:~6,2%.backupfile
结果: backup.backup_0130-5-_101151.backupfile
有谁知道如何解决这一问题?
我正在创建一个批处理文件来运行一些备份。但是,当我尝试给文件一个名称与当前日期时间它给出了一个奇怪的结果。批处理文件输出日期时间
我使用:
backup.backup_%DATE:~10,4%%DATE:~7,2%%DATE:~4,2%_%time:~0,2%%time:~3,2%%time:~6,2%.backupfile
结果: backup.backup_0130-5-_101151.backupfile
有谁知道如何解决这一问题?
我认为你应该使用wmic
代替date
和time
,让您的当前日期和时间而不会受区域设置
@echo off
SETLOCAL EnableDelayedExpansion
for /f "skip=1 tokens=1-6 delims= " %%a in ('wmic path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') do (
IF NOT "%%~f"=="" (
set /a FormattedDate=10000 * %%f + 100 * %%d + %%a
set FormattedDate=!FormattedDate:~0,4!!FormattedDate:~-4,2!!FormattedDate:~2,2!
set /a FormattedTime=%%b * 10000 + %%c * 100 + %%e
set FormattedTime=!FormattedTime:~0,2!!FormattedTime:~-4,2!!FormattedTime:~-2,2!
)
)
echo backup.backup_!FormattedDate!_!FormattedTime!
PAUSE
上面的代码将被命名为以下格式的文件:
backup.backupYYYYMMDD_HHMMSS
如backup.backup_20131013_163800
希望这会有所帮助。
试试这个:
@ECHO OFF &SETLOCAL
for /f "skip=1delims=." %%a in ('wmic os get localdatetime') do if not defined DateTime set "DateTime=%%a"
echo(backup.backup_%DateTime:~0,8%_%DateTime:~8%
当时间是9:00而不是09:00时失败 –
我也建议WMIC为XP专业版及更高版本。我经常发布这个代码片段:
这段代码的前四行会给你可靠的YY DD MM YYYY HH Min Sec变量在XP Pro和更高版本中。
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
如果你不得不在你的批处理文件中多次使用它,那么把它作为一个函数是很好的。这可能有所帮助:
:GetFileDateTime Format ret
@echo off & setlocal
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%.%Min%.%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%.%Min%.%Sec%"
(ENDLOCAL
if /i "%~1"=="DT" set "%~2=%datestamp% %timestamp%"
if /i "%~1"=="TD" set "%~2=%timestamp% %datestamp%"
if /i "%~1"=="D" set "%~2=%datestamp%"
if /i "%~1"=="T" set "%~2=%timestamp%"
if /i "%~1"=="F" set "%~2=%fullstamp%"
)
exit /b
Usage Example:
call :GetFileDateTime TD timedate
echo %timedate%
call :GetFileDateTime D date
echo %date%
你可以打开一个命令shell并键入'echo%DATE%'并发布结果请。 '%DATE:〜10,4%'位从系统日期变量的字符4开始提取4个字符。问题在于您的系统与命令最初编写的系统具有不同的日期格式。因此,确定%DATE%供应年,月和日期的适当子字符串将会是一个问题 – GregHNZ