2015-01-20 71 views
1

這可能對那裏的人非常明顯,但我在嘗試解決VBScript中的錯誤時遇到了很多麻煩。在腳本中,我正在運行一系列目錄中的.zip文件,並處理創建日期在指定範圍內的文件。例如,如果用戶輸入兩個參數9/3/2014和9/5/2014,我只想在該日期範圍內處理zip文件。在VBScript中比較文件的創建日期

這裏的if語句我使用:

If Mid(file.NAME,len(file.NAME)-3,4) = ".zip" AND 
FormatDateTime(file.DateCreated, 2) >= Wscript.Arguments(1) AND 
FormatDateTime(file.DateCreated, 2) <= Wscript.Arguments(2) then 

我使用FormatDateTime函數從文件創建日期刪除時間。這樣我應該只剩下一個短日期(mm/dd/yyyy)。

我遇到的問題是我正在處理給定範圍之外的日期。例如,如果給定的範圍是2014年9月3日至2014年9月5日,那麼由於某種原因,我最終也會處理9/30/2014。任何人都可以解決這個問題

回答

2

發現我的問題的來源。 FormatDateTime返回一個字符串。此外,我所傳遞的論據也是字符串。這意味着我實際上在做一個字符串比較而不是日期比較。 if語句應該是:

If Mid(file.NAME,len(file.NAME)-3,4) = ".zip" AND 
CDate(FormatDateTime(file.DateCreated, 2)) >= CDate(Wscript.Arguments(1)) AND 
CDate(FormatDateTime(file.DateCreated, 2)) <= CDate(Wscript.Arguments(2)) then 
+1

無需轉換.DateCreated兩次。 – 2015-01-20 20:16:24

3

兩者的FormatDateTime()的返回值和.Argments的項目字符串。 (stringyfied)的一串數字比較會給不方便結果:

>> WScript.Echo CStr(5 < 30) 
>> WScript.Echo CStr("5" < "30") 
>> 
True 
False 

使用CDate()到.Arguments轉換爲日期和DateDiff()他們對.DateCreated比較。