ここではさまざまな回答を読んだことがあります。バッチは3回目の試行で正しく実行されますが、タスクマネージャでは全く実行されません。
私の問題はスクリプト "log_copy_script.cmd"にありますが、その中にいくつかのサブルーチンがありますが、1つは非常に奇妙です。このスクリプトは、今日の日付を取得し、1年を差し引いた後、1年前のフォルダの削除を開始するためのものです。時にはうまくいく。実際にコマンドラインで実行すると、まず何も名前のついていないフォルダを削除しようとします。それから、月と日の "MMDD"を試してから、3回目に "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