2013-10-25 41 views
0

我正在創建一個批處理文件來運行一些備份。但是,當我嘗試給文件一個名稱與當前日期時間它給出了一個奇怪的結果。批處理文件輸出日期時間

我使用:

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

有誰知道如何解決這一問題?

+0

你可以打開一個命令shell並鍵入'echo%DATE%'併發布結果請。 '%DATE:〜10,4%'位從系統日期變量的字符4開始提取4個字符。問題在於您的系統與命令最初編寫的系統具有不同的日期格式。因此,確定%DATE%供應年,月和日期的適當子字符串將會是一個問題 – GregHNZ

回答

2

我認爲你應該使用wmic代替datetime,讓您的當前日期和時間而不會受區域設置

@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

希望這會有所幫助。

2

試試這個:

@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% 
+0

當時間是9:00而不是09:00時失敗 –

0

我也建議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 
1

如果你不得不在你的批處理文件中多次使用它,那麼把它作爲一個函數是很好的。這可能有所幫助:

: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% 
相關問題