2012-06-11 43 views
1

,我有以下幾行批處理文件:批處理文件 - 計劃運行VS CMD運行 - 正確的日期

@echo off 
echo Running dump... 
"D:\wamp\bin\mysql\mysql5.5.16\bin\mysqldump" --host="localhost" --user="****" --password="****" database> "D:\wamp\backup\mysql\"back.%date:~0,2%.sql 
echo Done! 

推測,它應該創建一個備份文件,與今天的一天,01,02,03, ...,31,也就是

back.01.sql 
back.02.sql 
back.03.sql 

當我從CMD運行它,它實際上是將其創建爲預期的,但是當它被從調度運行,它看起來像:

back.Mo.sql 
back.Tu.sql 
back.We.sql 

我應該使用什麼日期格式來確保它實際上是用每月的某一天的號碼創建的?

回答

3

在Windows批處理日期和時間是件痛苦的事情。

最強大的解決方案是使用WMIC獲取本地日期和時間。它返回以下格式的值:

YYYYMMDDhhmmss.dddddd-ttt 

YYYY = year 
MM  = month 
DD  = day 
hh  = hour in 24 hour format 
mm  = minutes 
ss  = seconds 
dddddd = fractional seconds 
ttt = time zone (minutes difference from Greenwich Mean Time) 

所以,你可以使用以下方法來獲得該月的當前日在一個變量
編輯 - 修正啓動子的位置,距離7至6

set curDate= 
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined curDate set curDate=%%x 
set day=%curDate:~6,2% 

這種技術的一大優點是它可以在世界上任何Windows機器上工作,而不管區域設置如何。


這裏是插入
編輯技術,你的代碼 - 修正啓動子的位置,距離7〜帳戶下,你的任務是運行6個

@echo off 
echo Running dump... 
set curDate= 
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined curDate set curDate=%%x 
set "day=%curDate:~6,2%" 
"D:\wamp\bin\mysql\mysql5.5.16\bin\mysqldump" --host="localhost" --user="****" --password="****" database> "D:\wamp\backup\mysql\back.%day%.sql" 
echo Done! 
+0

這聽起來不錯,但是每當我回顯我得到的值'C:\> echo%day% % curDate:〜7,2%' - 對不起,我對命令語言並不熟悉 – Elen

+0

@Elen - 查看我的更新回答 – dbenham

+0

我試着從cms運行它,現在我把你的代碼放到'bat'文件中 - 我運行它今天創建了一個名爲'back.21.sql'的文件 - 其中21個來自哪裏?... – Elen

0

只需設置區域設置dd.MM.yyyy 。 (使用控制面板或註冊表HKCU \控制面板\國際\ sShortDate至少爲Windows XP

相關問題