Я не понимаю, как существует задача в пакетном сценарии?

#windows #batch-file #cmd

Вопрос:

Я создал файл с именем CHECKPRODUCT.CMD. но у меня есть другой файл, который запускается при запуске, и он называется ACTIVATED.cmd. но я не понимаю, как существует задача ACTIVATED.cmd в CHECKPRODUCT.cmd. как я пробовал в этом примере :

 if tasklist == "ACTIVATED.cmd" (
goto :1 ) else (
goto :2 )
 

но это не работает!

кто-нибудь может мне с этим помочь ?? МНЕ НУЖНА помощь. в самом деле! большое вам спасибо!

Ответ №1:

Если я правильно понял ваш вопрос, то вы пытаетесь определить, работает ли еще один пакетный файл из другого.

Вы можете сделать это, проверив строки командной строки запуска cmd.exe процессы, использующие утилиту командной строки WMI.

 @Echo Off
SetLocal EnableExtensions

Set "ScriptName=ACTIVATED.cmd"

%SystemRoot%System32wbemWMIC.exe Process Where^
 "Name='cmd.exe' And CommandLine Like '%%%ScriptName:_=[_]%%%'"^
 Get ProcessId /Value 2>NUL | %SystemRoot%System32find.exe "=" 1>NUL^
 || GoTo :2

:1
Echo %ScriptName% is running.
Pause
GoTo :EOF

:2
Echo %ScriptName% is not running.
Pause
 

Примечание: Хотя вы можете свободно изменять имя сценария в режиме онлайн 4 , пожалуйста, имейте в виду, что для этого потребуется дополнительная работа, если вы решите использовать имена файлов, содержащие [ , ] ^ , или % символы.

Ответ №2:

Вы можете использовать список задач для проверки многих аспектов выполняемых задач, и обучение в старой школе давало вашим файлам bat название именно по этой причине.

введите описание изображения здесь

Во-первых, всегда убедитесь (и я часто забываю), что используйте заголовок в bat или cmd, который, скорее всего, не выйдет быстро, он полезен для списка задач, как здесь, и иногда taskkill /t или считается плохим, если вы используете /F. Попробуйте использовать уникальное имя, иначе редактирование activate.cmd может отображаться в блокноте и cmd

 @echo off amp; title ACTIVATED
echo Running Activated
pause
 

Вы можете использовать другие тесты состояния, кроме «запущено» см. tasklist /?

 tasklist /FI "WindowTitle eq ACTIVATED" /FI "STATUS eq running" |  Find /i "cmd"
REM bad find=2    not found=1   found at least once=0
if %errorlevel% == 0 (
echo true) else (
echo false)
pause
 

Возможно, вам потребуется использовать ....ACTIVATED*" , если вы хотите протестировать несколько записей и т. Д.