我已閱讀了各種答案,並嘗試了幾次,但沒有運氣。批次在第三次嘗試中正確運行,但在任務管理器中完全沒有運行
我的問題是腳本「log_copy_script.cmd」,我有一些子程序,但其中一個是非常奇怪的行爲。該腳本旨在獲取今天的日期,減去1年,然後開始刪除1年前的文件夾。它有時會起作用。事實上,如果我通過命令行運行它,它將首先嚐試刪除一個名爲「」的文件夾,然後它將嘗試只是月份和日期「MMDD」,然後第三次它將正確執行「YYYYMMDD」。隨後的任何進一步的時間將會成功,就像有東西被緩存一樣。
當我通過Windows任務計劃程序運行它時,它將運行並登錄到我的日誌文件,但每次它都會嘗試刪除空白。
有人知道這裏發生了什麼嗎?謝謝。 : -/
REM Get IP and Vol Name from file, define variables
for /f "delims=" %%x in (C:/SystemHealthScripts/ip_address.txt) do set IP_ADDRESS=%%x
for /f "delims=" %%x in (C:/SystemHealthScripts/vol_name.txt) do set VOL_NAME=%%x
set MAINDIR="\\%IP_ADDRESS%%VOL_NAME%"
set SUBDIR="\\%IP_ADDRESS%%VOL_NAME%\%LOG_DATE%"
set LOGFILE="\\%IP_ADDRESS%%VOL_NAME%\log.txt"
if [%1]==[delete_oldest] (
REM Format date
for /f "tokens=1,2,3,4 delims=/ " %%a in ("%date%") do set month=%%b&set year=%%c&set day=%%a
set LOG_DATE=%year%%month%%day%
set /A "DEL_YEAR=year-1"
set DEL_DATE=%DEL_YEAR%%month%%day%
REM Basic validation (Greater than or equal to 20160101 then valid date)
if [%DEL_DATE%] GEQ [20160101] (
call echo "%LOG_DATE% %LOG_TIME%: Deleting date '%DEL_DATE%' started" >> %LOGFILE%
call rmdir /s /q %MAINDIR%\%DEL_DATE%
call echo "%LOG_DATE% %LOG_TIME%: Deleting date '%DEL_DATE%' finished" >> %LOGFILE%
) else (
call echo "%LOG_DATE% %LOG_TIME%: ERROR in deleting date '%DEL_DATE%', validation not met!" >> %LOGFILE%
)
)
也許我應該指出,由於不同的原因可以同時調用這個腳本。我用Java和運行實例,也許這不是那樣的?也許我的例程需要單獨的腳本文件? – Jon557
@magoo提供了一個很好的描述你的問題,但你可以通過創建一個函數而不是使用IF塊來緩解這個問題。你可以創建一個名爲':delete_oldest'的標籤,而不是IF命令,你可以使用帶有輸入參數的CALL命令。 'CALL:%〜1'。 – Squashman