2011-08-25 135 views
3

查看下面的批次代碼,它顯示日期和時間,但缺少一天。如何解決這個問題?缺少日期

代碼:

@echo off 
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dt=%%c-%%a-%%b) 
For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a.%%b) 
set bkupfilename=%1 %dt% %tm%.bak 
echo Backing up to file: %bkupfilename% 

輸出:

C:\wamp>backup.bat 
Backing up to file: -08-2011 15.49.bak 

回答

1

當像date /t解析系統的輸出命令,將系統區域是非常重要的。

該腳本的第一行發出命令date /t並解析其輸出。它在指定的分隔符處分割字符串,這些分隔符是空間(因此是空格前的空格")和斜槓/。然後將找到的第2至第4個項目分配給變量%a,%b%c

如果您在控制檯上輸入date /t你會看到輸出和明白爲什麼腳本不工作...

  • 對命令編寫使用美國日期格式的系統(月 - 日 - 年),
  • 在我的系統上,它使用歐洲日期格式(日 - 月 - 年),腳本可以工作,但反轉月份和日期。

我想你的系統上,由於你的系統區域設置,date /t命令的輸出是不同的。您將不得不修改您的腳本以符合這些設置。

(也,請記住,這種腳本是不可移植的:使用其他區域的其他用戶也會遇到同樣的問題)

+0

謝謝你,這就是解釋它。 'date/t'的輸出是2011年5月25日 –