Jak poczekać, aż plik wsadowy zacznie proces, a następnie kontynuować?

4

Czy ktoś może mi powiedzieć, co muszę napisać w [X], aby proces Maplestory.exe został zabity, gdy się uruchomi? Nie chcę używać poleceń pomiaru czasu, dzięki! ( gamelauncher.exe powoduje maplestory.exe biegać)

@echo off
start D: Gry MapleStory GameLauncher.exe
[X]
taskkill / im MapleStory.exe
wyjście

Erik Avraham
źródło

Odpowiedzi:

3

Wydmuchiwałbym wyjście tasklist w find, szukać maplestoryi użyj IF oświadczenie i a GOTO kontynuować pętlę, sprawdzając ten proces, aż zostanie znaleziony. Po znalezieniu możesz GOTO inny punkt, aby zabić zadanie.

Coś takiego powinno załatwić sprawę:

:search
tasklist|find "maple"
IF %ERRORLEVEL% = 0 THEN (GOTO found)
TIMEOUT /T 1
GOTO search

:found
taskkill /im maplestory.exe

(The TIMEOUT polecenie wstrzymuje skrypt na 1 sekundę. Pomoże to zapobiec zasysaniu zbyt dużej ilości procesora przez tę pętlę.)

nhinkle
źródło
0

Dlaczego musisz cokolwiek uruchomić? Możesz po prostu spróbować przerwać proces w dowolnym momencie, a następnie podjąć działanie po sukcesie ( && operator) lub niepowodzenie ( || operator). Możesz po prostu przejść przez GOTO, aż osiągniesz sukces.

@echo off
start D:\Games\MapleStory\GameLauncher.exe
:killMapleStory
taskkill /im MapleStory.exe >nul 2>nul || goto killMapleStory
exit

Możesz wprowadzić 1-sekundowe opóźnienie w pętli, aby oszczędzić zasoby procesora. MapleStory nigdy nie będzie działać dłużej niż ~ 1 sekundę.

@echo off
start D:\Games\MapleStory\GameLauncher.exe
:killMapleStory
timeout /t 1 /nobreak >nul
taskkill /im MapleStory.exe >nul 2>nul || goto killMapleStory
exit
dbenham
źródło
0

@nhinkle, musiał trochę zmodyfikować składnię na moim 64-bitowym systemie Win7.

    :search
    tasklist|find "maplestory.exe"
    IF %ERRORLEVEL% == 0 GOTO :found
    TIMEOUT /T 1
    GOTO :search

    :found
    TIMEOUT /T 3
    taskkill /IM maplestory.exe 
    exit
Eddie V
źródło
Dlaczego potrzebujesz dodatkowego limitu czasu po wykryciu (znalezieniu) procesu?
Scott
-2
powershell -windowstate hidden
:9
tasklist /fi "imagename eq Chrome.exe" /fi "CpuTime gt 00:00:20" > Uit5.dat & findstr "INFO" uit5.dat >NUL & if errorlevel 1 (choice /d y /t 2|choice /d y /t 2)
goto :9
REM you could write to a file, and check if the criteria "INFO" is not present, therefore your original criteria is true.  For Example  You use the criteria chrome with CPU time greater than 20 seconds and make your computer beep when the criteria is existing.

Lub Bardziej ogólnie

  powershell -windowstate hidden exit
  :9
  tasklist /fi "imagename eq %1" /fi "CpuTime gt %2" > Uit5.dat & findstr "INFO" uit5.dat >NUL & if errorlevel 1 goto :8
goto :9
:8
exit
Misha Taylor
źródło