hewaslosey
Goto Top

Schleife für zu beendende Dienste erstellen - Code bereits vorhanden - Variablen (Dienstnamen) aus txt auslesen und in schleife durchlaufen

Hallo zusammen,

ich bin gerade dabei mich etwas weiter in Batch zu vertiefen... Nur wie bekomme ich folgenden Code als schleife hin?
Ich habe 4 Variablen, wobei ich die zu beendenden Dienste in einer TXT haben möchte und später beliebig viele hinzufügen möchte...

Es ist ja technisch nicht gerade korrekt das ganze mit Copy & Past zu gestalten...

Folgendes soll passieren, da passt der Code auch schon:

1. überprüfen ob Dienst exestiert
2. überprüfen ob Dienst gestartet ist
3. Wenn Dienst gestartet ist -> Stoppen
4. Das ganze noch mit loggen

Aber wie bekomme ich die einzelnen Variablen in dem ganzen Code immer hochgezähl, bzw. wie binde ich es am besten dan einer TXT datei an?

Vielen Dank vorab an euch!

SET SERVICE0=AdobeUpdateService
SET SERVICE1=AdobeFlashPlayerUpdateSvc
SET SERVICE2=AGSService
SET SERVICE3=AdobeARMservice

REM ----------------------------------------------- Service 0 -----------------------------------------------
SC query "%SERVICE0%">NUL  
if "%ERRORLEVEL%"=="0" goto yes-ServiceExist0  
if "%ERRORLEVEL%"=="1060" goto no-ServiceExist0  

:yes-ServiceExist0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto NEXT

:no-ServiceExist0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" not exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END0

:NEXT

SC query "%SERVICE0%" | FIND "RUNNING">NUL  
if "%ERRORLEVEL%"=="0" goto yes-ServiceFound0  

SC query "%SERVICE0%" | FIND "STOPPED">NUL  
if "%ERRORLEVEL%"=="0" goto no-ServiceFound0   

:yes-ServiceFound0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" found "RUNNING"(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
net stop "%SERVICE0%">NUL 2>NUL  

SC query "%SERVICE0%" | FIND "RUNNING">NUL  
if "%ERRORLEVEL%"=="0" goto no-Killed0  

SC query "%SERVICE0%" | FIND "STOPPED">NUL  
if "%ERRORLEVEL%"=="0" goto yes-Killed0  
goto END0

:no-Killed0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" doesent Killed - ERROR (1)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END0

:yes-Killed0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" Killed(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END0

:no-ServiceFound0
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%SERVICE0%" found "STOPPED" - Service already Killed (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END0

:END0
REM ----------------------------------------------- Service 0 -----------------------------------------------

Content-Key: 356367

Url: https://administrator.de/contentid/356367

Printed on: April 20, 2024 at 02:04 o'clock

Member: em-pie
em-pie Nov 28, 2017 updated at 14:47:34 (UTC)
Goto Top
Moin,


Als nächstes schaue dir mal folgendes an:
Inhalt der Textdatei services.txt
ServiceA
ServiceB
ServceC
ServiceD
ServiceE

Das Batch-Script:
cd "%USERPROFILE%\desktop"  
for /f "tokens=* delims=" %%x in (services.txt) do (  
 echo %%x
)
echo.
pause
exit

Die Variable %%x beinhaltet jede Zeile aus /services.txt

Das was in den Klammern nach dem do in Klammern steht , wird dann für jede Variable %%x ausgeführt (wenn die entsprechend platziert wurde)

Gruß
em-pie
Member: Friemler
Friemler Nov 28, 2017 updated at 20:55:03 (UTC)
Goto Top
Hallo, willkommen im Forum!

Mein Tutorial zur FOR-Schleife könnte für Dich nützlich sein.

Grüße
Friemler


[EDIT]
Mein Kompliment für Deinen sehr akkurat formatierten Code, sieht man selten bei Anfängern. Weiter so!
[/EDIT]
Member: hewaslosey
hewaslosey Nov 29, 2017 updated at 15:49:07 (UTC)
Goto Top
Hallo,

also die Variante hat nicht geklappt, er gibt mir komischerweise dann in meine Logfile nur %X aus, anstatt die Namen der Dienste...
Habe einfach die Variablen %SERVICE0% gegen %%x getauscht (selbstverständlich die Schleife eingebaut).

Vollständiger Code sieht also so aus:
cd /d "%~dp0"   

for /f "tokens=* delims=" %%x in (services.txt) do (   

REM ----------------------------------------------- Service  -----------------------------------------------
SC query "%%x">NUL  
if "%ERRORLEVEL%"=="0" goto yes-ServiceExist  
if "%ERRORLEVEL%"=="1060" goto no-ServiceExist  

:yes-ServiceExist
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto NEXT

:no-ServiceExist
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" not exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:NEXT

SC query "%%x" | FIND "RUNNING">NUL  
if "%ERRORLEVEL%"=="0" goto yes-ServiceFound  

SC query "%%x" | FIND "STOPPED">NUL  
if "%ERRORLEVEL%"=="0" goto no-ServiceFound  

:yes-ServiceFound
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" found "RUNNING"(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
net stop "%%x">NUL 2>NUL  

SC query "%%x" | FIND "RUNNING">NUL  
if "%ERRORLEVEL%"=="0" goto no-Killed  

SC query "%%x" | FIND "STOPPED">NUL  
if "%ERRORLEVEL%"=="0" goto yes-Killed  
goto END

:no-Killed
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" doesent Killed - ERROR (1)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:yes-Killed
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" Killed(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:no-ServiceFound
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" found "STOPPED" - Service already Killed (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:END
REM ----------------------------------------------- Service  -----------------------------------------------
)
echo.
Pause
exit

Ich schaue mir das Tutorial der Schleifen einmal gerne an, macht es glaube einfacher wenn ich dafür ein Verständniss aufbaue face-smile

Vielen Dank!
Mitglied: 134464
134464 Nov 29, 2017 updated at 15:42:21 (UTC)
Goto Top
if "%ERRORLEVEL%"
Du solltest dir den Abschnitt Verzögerte Variablenerweiterung (Delayed Expansion) im o.a. Tutorial dringend mal anschauen face-smile, dann verstehst du warum du in einer FOR-Schleife auf Variablen mit % Zeichen und ohne DelayedExpansion keinen aktuellen Wert bekommst.
Wobei du es dort noch nicht einmal brauchst wenn du solche Prüf-Abschnitte (Existiert/ Existiert nicht) so schreibst
sc query "%%x" >nul 2>&1 && (goto yes-ServiceExist) || (goto no-ServiceExist)
Member: hewaslosey
hewaslosey Nov 29, 2017 updated at 16:15:24 (UTC)
Goto Top
Ich verstehe es nur noch nicht ganz... mit dem Delayed Expansion, also

Punkt 1:
setlocal enabledelayedexpansion setzen

Punkt 2:
Variablen also if "%ERRORLEVEL%" durch ausrufezeichen tauschen: if "!ERRORLEVEL!"

Das ganze weil ab Zeile 8 alle Variablen durch Ihren aktuellen Werte ersetzt werden, hab ich das soweit korrekt verstanden?

Aber muss nich nicht auch die %%x Variable dann tauschen? Wenn ja wie?

Würde mich schonmal mit dem Fall beschäftigen, bin jetzt neugierig geworden face-smile

Code sieht mittlerweile wie folgt aus:

cd /d "%~dp0"   

for /f "tokens=* delims=" %%x in (services.txt) do (   

REM ----------------------------------------------- Service -----------------------------------------------
SC query "%%x">NUL  
if "!ERRORLEVEL!"=="0" goto yes-ServiceExist  
if "!ERRORLEVEL!"=="1060" goto no-ServiceExist  

:yes-ServiceExist
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto NEXT

:no-ServiceExist
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" not exist (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:NEXT

SC query "%%x" | FIND "RUNNING">NUL  
if "!ERRORLEVEL!"=="0" goto yes-ServiceFound  

SC query "%%x" | FIND "STOPPED">NUL  
if "!ERRORLEVEL!"=="0" goto no-ServiceFound  

:yes-ServiceFound
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" found "RUNNING"(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
net stop "%%x">NUL 2>NUL  

SC query "%%x" | FIND "RUNNING">NUL  
if "!ERRORLEVEL!"=="0" goto no-Killed  

SC query "%%x" | FIND "STOPPED">NUL  
if "!ERRORLEVEL!"=="0" goto yes-Killed  
goto END

:no-Killed
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" doesent Killed - ERROR (1)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:yes-Killed
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" Killed(0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:no-ServiceFound
echo ---------------------------------------------------------------------------------------------->>%LogFile%
echo %TimeStamp% Service "%%x" found "STOPPED" - Service already Killed (0)>>%LogFile%  
echo ---------------------------------------------------------------------------------------------->>%LogFile%
goto END

:END
REM ----------------------------------------------- Service  -----------------------------------------------
)
echo.
Pause
exit

das Log sieht wie folgt aus:

2017-11-29--17-13-22: Service "%x" exist (0)
2017-11-29--17-13-22: Service "%x" found "RUNNING"(0)
Member: hewaslosey
hewaslosey Nov 30, 2017 at 16:44:27 (UTC)
Goto Top
oder macht es mehr sinn das ganze vorher in ein Array zu packen und danach via Schleife zu verwenden?

Ich bekomme das Problem einfach nicht gelöst, mein Logfile zeigt 1. nur zwei Einträge von einem Service der %x heißt, obwohl ich im textfile ja
4 Einträge hatte. Irgendwas stimmt nicht.
Member: Friemler
Solution Friemler Nov 30, 2017 updated at 19:11:00 (UTC)
Goto Top
'n Abend,

teste mal folgenden Code. Auf eine Erklärung verzichte ich mit voller Absicht, denn Du möchtest Dich ja in Batchscript einarbeiten. Warum und wie der Code im einzelnen funktioniert ist dann Deine Hausaufgabe. face-wink

Tipp: Batchscripts zum Testen immer aus einer Konsole starten (nicht per Doppelklick!) und ECHO OFF Befehle entfernen (damit man den Scriptablauf verfolgen kann).

@echo off & setlocal

:: ------------------------------- Konfiguration -------------------------------
set "Services=.\Services.txt"  
set "LogFile=.\Log.txt"  
set "TimeStamp=%Date% %Time%"  
:: ------------------------------- Konfiguration -------------------------------


pushd "%~dp0"  

:: ---------------------------------- Service ----------------------------------
set /a Cnt=1

:LOOP
  set "SrvcName="  

  for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%Services%" 2^>NUL') do (  
    if "%%a" equ "%Cnt%" set "SrvcName=%%b"  
  )

  if not defined SrvcName goto :QUIT

  sc query "%SrvcName%" >NUL && goto :yes-ServiceExist  
  if "%ERRORLEVEL%" equ "1060" goto :no-ServiceExist  
  
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" query failed with error code %ERRORLEVEL% - ERROR (1)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :no-ServiceExist
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" not exist (0)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-ServiceExist
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" exist (0)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :NEXT

  :NEXT
  sc query "%SrvcName%" | findstr /ir /c:"\<STOPPED\>" >NUL && goto :no-ServiceFound  
  sc query "%SrvcName%" | findstr /ir /c:"\<RUNNING\>" >NUL && goto :yes-ServiceFound  

  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" found unsupported status - ERROR (1)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :no-ServiceFound
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" found "STOPPED" - Service already killed (0)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-ServiceFound
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" found "RUNNING"(0)  
  >>%LogFile% echo --------------------------------------------------------------------------------

  net stop "%SrvcName%" 1>NUL 2>NUL  

  sc query "%SrvcName%" | findstr /ir /c:"\<RUNNING\>" >NUL && goto :no-Killed  
  sc query "%SrvcName%" | findstr /ir /c:"\<STOPPED\>" >NUL && goto :yes-Killed  

  :no-Killed
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" not killed - ERROR (1)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-Killed
  >>%LogFile% echo --------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% Service "%SrvcName%" killed(0)  
  >>%LogFile% echo --------------------------------------------------------------------------------
  goto :CONTINUE

  :CONTINUE
  set /a Cnt+=1
goto :LOOP

echo(
:: ---------------------------------- Service ----------------------------------


:QUIT
pause

Grüße
Friemler
Member: hewaslosey
hewaslosey Dec 01, 2017 updated at 09:18:13 (UTC)
Goto Top
Der funktioniert! Super, vielen vielen lieben dank face-smile

Muss das gleiche jetzt für Tasks (Prozesse) umsetzten, dabei schau ich mir jetzt mal alles genauer an.
Das Verständnis zu schleife habe ich jetzt... Das Tutorial von dir ist klasse beschrieben!

Was mich noch verwirrt sind die Variablen mit %%buchstabe, warum verhalten die sich anders als %String%?

Das mit dem Loop ist wiederum klasse! Verstehe ich auch soweit, sobald die Variable leer ist, bzw. nicht definiert, springt
er zu Quit unter dem Loop. Gut umgesetzt, hatte aber auch zuvor nie etwas mit Loops zu tun... Bzw. der Loop ja nichts anders
ist wie das er beim goto nach oben zurückspringt (hätte ich auch mal drauf kommen können).

Nur muss ich jetzt mal schauen wie das bei den Tasks ist, hier muss ich dann noch eventuell mit errorleveln arbeiten,
ebenso später bei meinem wiederum nächstem Step MSI Deinstallation, da brauche ich das Errorlevel ja auch noch?

Da werde ich dann wahrscheinlich wieder die Ausgabeprobleme haben?

Was ich eigentlich bauen möchte, ist ein Uninstall Script, es soll folgende Textfiles enthalten:

1. Delete_Data.txt = Zum löschen verschiedener Dateien (pro Zeile eine Datei)
2. Delete_Folder.txt = Zum löschen verschiedener Ordner (pro Zeile ein Ordner)
3. Delete_Registry_Keys.txt = Zum löschen verschiedener Registry Keys (pro Zeile ein Registry Key)
4. Kill_Services.txt = Zum töten aller noch laufender Dienste (pro Zeile ein Dienst)
5. Kill_Tasks.txt = Zum töten aller noch laufenden Tasks (pro Zeile ein Task)
6. Uninstall_MSI.txt = zum Deinstallieren aller Programme (pro Zeile ein Product Code für MSI Uninstall)

So lässt sich das Script immer erweitern, für andere Versionen etc.
Adobe arbeitet sehr schlampig, nun habe ich die Aufgabe das ganze selbst in einem Script umzusetzten.
Dabei ist das Logging existenziell wichtig bei...

Somit bin ich gerade mal mit meinem ersten Step fertig, aber viel Unterscheiden tun sie sich am Ende ja nicht... Daher brauche ich
ein Grundgerüst was ich auch verstehe... Beim Dienst beenden komme ich schon um die if %ERRORLEVEL% abfrage drum herum,
aber wie bei beim MSI Uninstall z.B.?
Member: Friemler
Friemler Dec 01, 2017 at 10:12:11 (UTC)
Goto Top
Moin

Tja, warum verhalten sich die Variablen mit %% davor anders als die, bei denen der Variablenname mit %-Zeichen umgeben ist? Da könntest Du genauso fragen "Warum ist die Banane krumm?". Das haben die Entwickler von Batchscript eben so vorgesehen.

Die Variablen mit %% davor sind Laufvariablen von FOR-Schleifen und die anderen sind sogenannte Umgebungs-/Environment-Variablen. Das ist wie mit den Äpfeln und Birnen: Beide wachsen auf Bäumen und sind botanisch verwandt, sehen aber anders aus und schmecken auch anders.


Wenn Du mal
if /?
in der Konsole eintippst, wirst Du noch eine andere Möglichkeit finden, den ERRORLEVEL abzufragen. Diese Möglichkeit funktioniert auch in geklammerten Code-Blöcken (z.B. einer FOR-Schleife oder eines IF-Befehls) ohne verzögerte Variablenerweiterung.

Die Hilfe zu den Konsolebefehlen aufzurufen, durchzulesen und zu verstehen ist sowieso genau das, was Du tun musst, um Deine Aufgabe zu bewältigen. Für den FOR-Befehl nimm lieber mein Tutorial.

Ich vermute mal, dass Du gerade in irgendeiner Form von Ausbildung steckst und die Aufgabe von Deinem Chef gestellt bekommen hast. Es wird Dir langfristig nichts bringen, Dir den Code hier im Forum schreiben zu lassen, denn nur selbst denken macht schlau. Benutze mein Script als Studienobjekt und versuche es im Detail zu verstehen, so lernt man etwas dazu.

Grüße
Friemler
Member: hewaslosey
hewaslosey Dec 01, 2017 updated at 10:37:13 (UTC)
Goto Top
Okay, das mach ich, versuche es jetzt selbstständig und Poste am Ende mal den Code face-smile Mercie, vielen dank nochmal

Habe dein Code aber etwas angepasst, da er beim nicht killen eines Dienstes den Errorcode nicht ins log übermittelt hat,
habe es mal so angepasst, jetzt klappts face-smile

@echo off & setlocal

:: ----------------------------------------- Konfiguration -----------------------------------------
set "Services=.\Content\Kill_Services.txt"  
set "LogFile=.\Logfile.txt"  
set "TAB=	"  
set "TimeStamp=%date:~-4%-%date:~-7,2%-%date:~-10,2%--%time:~-11,2%-%time:~-8,2%-%time:~-5,2%:%TAB%"  
:: ----------------------------------------- Konfiguration -----------------------------------------

pushd "%~dp0"  

:: -------------------------------------------- Service --------------------------------------------
set /a Cnt=1

:LOOP
  set "SrvcName="  

  for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%Services%" 2^>NUL') do (  
    if "%%a" equ "%Cnt%" set "SrvcName=%%b"  
  )

  if not defined SrvcName goto :QUIT

  sc query "%SrvcName%" >NUL && goto :yes-ServiceExist  
  if "%ERRORLEVEL%" equ "1060" goto :no-ServiceExist  
  
  :ERROR
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (1) %TAB% Service "%SrvcName%" query failed with error code "%ERRORLEVEL%"  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :no-Killed

  :no-ServiceExist
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (0) %TAB% Service "%SrvcName%" not exist  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-ServiceExist
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (0) %TAB% Service "%SrvcName%" exist  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :NEXT

  :NEXT
  sc query "%SrvcName%" | findstr /ir /c:"\<STOPPED\>" >NUL && goto :no-ServiceStarted  
  sc query "%SrvcName%" | findstr /ir /c:"\<RUNNING\>" >NUL && goto :yes-ServiceStarted  

  goto :CONTINUE

  :no-ServiceStarted
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (0) %TAB% Service "%SrvcName%" found "STOPPED" - Service already killed (0)  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-ServiceStarted
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (0) %TAB% Service "%SrvcName%" found "RUNNING"  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------

  net stop "%SrvcName%" /n 1>NUL 2>NUL  
  if not "!ERRORLEVEL!"=="0" goto :ERROR  

  sc query "%SrvcName%" | findstr /ir /c:"\<RUNNING\>" >NUL && goto :no-Killed  
  sc query "%SrvcName%" | findstr /ir /c:"\<STOPPED\>" >NUL && goto :yes-Killed  

  :no-Killed
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (1) %TAB% Service "%SrvcName%" not killed  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :CONTINUE

  :yes-Killed
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  >>%LogFile% echo %TimeStamp% ERROR: (0) %TAB% Service "%SrvcName%" killed  
  >>%LogFile% echo ----------------------------------------------------------------------------------------------------------------
  goto :CONTINUE

  :CONTINUE
  set /a Cnt+=1
goto :LOOP

echo(
:: -------------------------------------------- Service --------------------------------------------
:QUIT
Member: Friemler
Friemler Dec 01, 2017 at 11:24:18 (UTC)
Goto Top
Du fängst gerade an, Spaghetti-Code zu produzieren. Deine Ergänzung so umzusetzen, würde ich mir an Deiner Stelle nochmal gut überlegen...