Следующее похоже на работу. Я изменил одинарные кавычки во втором цикле for на двойные кавычки и добавил скобки для этого цикла.
schtasks /Query /nh /fo CSV | findstr /i /c:"time" | FOR /f "tokens=1 delims=," %%f IN ('more') DO (
:loop
FOR /f "tokens=*" %%a IN ("schtasks /query /nh /fo CSV /tn %%f ^| findstr /i /c:"running"") DO (
SET task=%%a
IF [%task%] == [] (
schtasks /change /tn %%f /DISABLE
) ELSE (
GOTO loop
)
)
)
Обновление:
ачипфл прав. Его ответ работает для меня
Я тоже попробовал еще раз и нашел следующее решение.
Сначала он отключает планирование задачи, а затем завершает задачу.
Затем, если задача все еще выполняется, она снова вызывает командный файл. Я не был уверен, если вы хотите закончить задачу. Но так как вам нравится ждать завершения задачи, я предположил, что.
@echo off
set querystring="time"
schtasks /Query /nh /fo CSV | findstr /i /c:"%querystring%" | FOR /f "tokens=1,3 delims=," %%f IN ('more') DO (
if %%g=="running" (
schtasks /change /tn %%f /Disable
schtasks /end /tn %%f
)
)
schtasks /Query /nh /fo CSV | findstr /i /c:"%querystring%" | FOR /f "tokens=1,3 delims=," %%f IN ('more') DO (
if %%g=="running" (
call test2.bat
exit /b 0
)
)
schtasks /Query /nh /fo CSV | findstr /i /c:"%querystring%"
Обновление 2:
комбинация
for /F "tokens=1,3 delims=," %%F in ('schtasks /QUERY /NH /FO CSV ^| findstr /I /C:"searchcriteria"') do call :LOOP %%F %%G
goto :EOF
:LOOP
schtasks /CHANGE /TN %1 /DISABLE
if %2=="running" schtasks /END /TN %1 & call :WAIT %1
goto :EOF
:WAIT
FOR /F "tokens=3 delims=," %%F IN ('schtasks /Query /nh /fo CSV /tn %1') DO set "test=%%F"
if %test%=="running" GOTO :WAIT
:EOF