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!
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 -----------------------------------------------
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 356367
Url: https://administrator.de/forum/schleife-fuer-zu-beendende-dienste-erstellen-code-bereits-vorhanden-variablen-dienstnamen-aus-txt-auslesen-356367.html
Ausgedruckt am: 07.04.2025 um 07:04 Uhr
11 Kommentare
Neuester Kommentar
Moin,
Als nächstes schaue dir mal folgendes an:
Inhalt der Textdatei services.txt
Das Batch-Script:
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
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
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]
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]

if "%ERRORLEVEL%"
Du solltest dir den Abschnitt Verzögerte Variablenerweiterung (Delayed Expansion) im o.a. Tutorial dringend mal anschauen 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)
'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.
Tipp: Batchscripts zum Testen immer aus einer Konsole starten (nicht per Doppelklick!) und
Grüße
Friemler
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.
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
Moin
Tja, warum verhalten sich die Variablen mit
Die Variablen mit
Wenn Du mal in der Konsole eintippst, wirst Du noch eine andere Möglichkeit finden, den
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
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
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 /?
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
Du fängst gerade an, Spaghetti-Code zu produzieren. Deine Ergänzung so umzusetzen, würde ich mir an Deiner Stelle nochmal gut überlegen...