我需要編寫一個調用命令並傳遞前一天日期參數的批處理文件。批處理文件中的前一天變量
實施例:
[功能] CCYYMMDD
我似乎不能找到的這個任何例子。而且我的公司不喜歡我們使用免費軟件,所以我真的需要解決方案成爲純粹的基於DOS的解決方案。
我需要編寫一個調用命令並傳遞前一天日期參數的批處理文件。批處理文件中的前一天變量
實施例:
[功能] CCYYMMDD
我似乎不能找到的這個任何例子。而且我的公司不喜歡我們使用免費軟件,所以我真的需要解決方案成爲純粹的基於DOS的解決方案。
您可以從Dostips: Date and Time
開始有功能來評估日期以連續日計數,反之亦然。
所以它的結果
call :jdate "%date%" JD_result
set /a prev_day=JD_result-1
call :jdate2date %prev_day% YYYY MM DD
echo Previous day is %DD%.%MM%.%YYYY%
我收到以下錯誤:系統找不到指定的批處理標籤 - jdate –
將dostips中的函數複製到批處理文件中可能是個好主意 – jeb
我無法找到原來的解決方案,我有這個,但我發現something over at Rob Van Der Woude's site,將做的工作很好。
由於SET /A
將字符串以0開頭的字符串視爲八進制,因此在該日誌文件中存在一個錯誤,並且這會在日/月日期以零開始時導致問題。
如果得到上面鏈接中的文件,但對更改代碼:JDate程序(線157)到:
SET MonthChecker1=%2
SET MonthChecker2=%MonthChecker1:~0,1%
IF %MonthChecker2%==0 (
SET MonthChecker3=%MonthChecker1:~1,1%
) ELSE (
SET MonthChecker3=%MonthChecker1%
)
SET DayChecker1=%3
SET DayChecker2=%DayChecker1:~0,1%
IF %DayChecker2%==0 (
SET DayChecker3=%DayChecker1:~1,1%
) ELSE (
SET DayChecker3=%DayChecker1%
)
SET /A Month1 = (%MonthChecker3% - 14)/12
SET /A Year1 = %1 + 4800
SET /A JDate = 1461 * (%Year1% + %Month1%)/4 + 367 * (%MonthChecker3% - 2 -12 * %Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + %DayChecker1% - 32075
FOR %%A IN (Month1 Year1) DO SET %%A=
GOTO:EOF
這是測試,並在2K8R2箱的工作。絕對值得使用它,而不是其他解決方案,因爲它有能力確定主機系統上的日期格式來自注冊表,而我找不到其他解決方案。
要解決八進制問題,您還可以使用'set/a Month = 1%月%%% 100',它始終以'1'作爲前綴號,模以一種安全的方式去除它 – jeb
我偶然發現了一些基於批處理的糟糕情況(它是在Win32上轉動Apache日誌文件的腳本,如果你想自己做一些Google搜索) - 我會看看是否可以挖出來您。它是什麼Win版本?我似乎記得我不得不修改它以使其在2K3上工作... – DaveRandom
我剛剛記得爲什麼我必須修改它,這是因爲'date'命令根據系統本地化設置以不同格式輸出日期 - 這是一臺機器還是許多可能具有不同設置的機器? – DaveRandom
Windows Server 2008 R2 –