Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst In FOR-Schleife nur 1x Echo ausgeben, den Rest in der Reihenfolge normal abarbeiten

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

17.03.2012, aktualisiert 17:48 Uhr, 3277 Aufrufe, 9 Kommentare

Hallo Administratoren,

ich schaffe leider nicht in einer FOR-Schleife nur 1x Echo auszugeben. Das ist eine Überschrift und lautet hier „Folgende Prozesse werden beendet“. Diese Echo-Zeile soll nur dann erscheinen, wenn während der Prüfung anhand der Prozess-Liste mind. ein aktives Prozess gefunden wurde. Wenn ich diese Zeile in der FOR-Schleife einfach miteinbaue, dann wird sie keine Überschrift mehr, da sie mit jedem gefundenen Prozess mehrmals ausgegeben wird (was zum Nachteil der Lesbarkeit ist).
Ich habe lang ausprobiert und gerätselt, wie ich das Problem mit der Übersichtlichkeit/Lesbarkeit auf einer eleganten Art lösen kann, bin ich aber nur zur einen Lösung gekommen, die funktioniert:
Die FOR-Schleife mit der Prozess-Liste im Batch zu verdoppeln (wenn bei der ersten Schleidf ein Prozess aus der Liste gefunden wurde, dann Echo und zu der nächsten FOR-Zeile springen, ansonsten anderes Echo Kein Prozess gefunden). Das hat aber den Nachteil, dass die Prozessliste an zwei Stellen im Batch verwaltet werden müssen – nicht schön.
Momentan ist es so, dass die Überschrift mit Echo „Folgende Prozesse werden beendet“ selbst dann ausgegeben wird, wenn kein Prozess gefunden wurde – ebenso nicht schön, da sie dann zur Verwirrung stiftet.
Obwohl es so elementar klingt schaffe ich leider nicht eine akzeptable Lösung mit meinen noch frisch gesammelten Batch-Erfahrungen zu finden.
Folgenden Code habe ich mir aufgebaut:
01.
@echo off 
02.
setlocal 
03.
@prompt -$G 
04.
 
05.
:Meldung 
06.
echo. 
07.
echo Folgende Prozesse werden beendet 
08.
	for %%d in ( 
09.
Datenbank.exe 
10.
ServiceDat.exe 
11.
	) do  if /i %%d==%%f call :TaskKill 
12.
Echo Kein Prozess gefunden 
13.
pause 
14.
goto :eof 
15.
 
16.
:TaskKill 
17.
for /f  %%f in ('tasklist /NH /FI "imagename eq %%d"') do echo. & echo %%f & taskkill /F /IM  %%f 
18.
:Prozesse überprüfen, die manuell beendet werden sollen 
19.
	for %%d in ( 
20.
Outlook.exe 
21.
WINWORD.EXE 
22.
	) do for /f  %%f in ('tasklist /NH /FI "imagename eq %%d"') do if /i %%d==%%f echo. & echo %%f 
23.
 
24.
:M1 
25.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
26.
echo Beenden Sie die Programme mit den hier aufgelisteten Prozessen manuell, um Datenverlust zu vermeiden. 
27.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
28.
echo.
Mit CALL-Funktion habe ich auch eine Weile experimentiert, das ändert allerdings nichts an der Tatsache. Hier muss eine Lösung in so einer Art "Zähler" rein, die 1x ein bestimmtes Echo bzw. eine Variable u. s. ausgibt und es nicht mehr wiederhohlt.
Aber ich verlasse mich gerne auf eurer Kompetenz und bedanke mich für eure Unterstützung.

Den tollen Workshop zu der FOR-Schleife von @Friemler habe ich gelesen und werde ihn noch mehrmals durchlesen müssen.

Nochmal Danke für eure Tipps und Korrekturen.

Euer
evinben
Mitglied: bastla
17.03.2012 um 18:06 Uhr
Hallo evinben!

Schematisch etwa so:
Vor der Schleife
01.
set "Ausgabe=Folgende Prozesse werden beendet"
und in der Schleife
01.
if defined Ausgabe ( 
02.
    echo %Ausgabe% 
03.
    set "Ausgabe=" 
04.
)
Deine Zeile 12 wird übrigens immer ausgegeben werden ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
17.03.2012 um 21:35 Uhr
Hallo bastla!

Danke dir - stimmt, das ist eine recht einfache Lösung. Was mir auch neu ist, dass nach echo %Ausgabe% kein & folgen muss.


Evinben
Bitte warten ..
Mitglied: evinben
17.03.2012 um 22:18 Uhr
Hallo bastla,

jetzt habe ich bemerkt, dass mit dem folgenden Code-Aufbau jeweils nur ein Prozess gekillt wird. Ich kann leider nicht schaffen die FOR-Schleife so umzustruktruieren, dass wenn die Variable %Meldung% (und auch %MeldungB%) nicht gesetzt ist der Rest trotzdem abgearbeitet werden soll - also dass !alle! Prozesse trotzdem gekillt werden sollen.

01.
echo off 
02.
setlocal 
03.
@prompt -$G 
04.
 
05.
:In der FOR-Schleife sind Prozesse in jeder Zeile einzutragen, die auf Aktivität überprüft und automatisch beendet werden sollen 
06.
 
07.
:Meldung 
08.
echo. 
09.
set "Meldung=Folgende Prozesse werden beendet" 
10.
 
11.
	for %%d in ( 
12.
 
13.
 
14.
Datenbank.exe  
15.
ServiceDat.exe  
16.
 
17.
	) do for /f  %%f in ('tasklist /NH /FI "imagename eq %%d"') do if /i %%d==%%f if defined Meldung echo %Meldung% & set "Meldung=" & set Gefunden=true & echo. & taskkill /F /IM  %%f 
18.
 
19.
:Prozesse überprüfen, die manuell beendet werden sollen 
20.
set "MeldungB=Beenden Sie die Programme mit den hier gelisteten Prozessen manuell, um Datenverlust zu vermeiden." 
21.
 
22.
	for %%d in ( 
23.
 
24.
EXCEL.EXE 
25.
WINWORD.EXE 
26.
 
27.
	) do for /f  %%f in ('tasklist /NH /FI "imagename eq %%d"') do if /i %%d==%%f if defined MeldungB call :MeldungB & set "MeldungB=" & set Gefunden=true & echo. & echo %%f 
28.
 
29.
goto :M2 
30.
 
31.
 
32.
:MeldungB 
33.
echo. 
34.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
35.
echo %MeldungB% 
36.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
37.
echo. 
38.
goto :eof 
39.
 
40.
:M2 
41.
 
42.
if not defined Gefunden Echo Kein Prozess gefunden 
43.
 
44.
 
45.
:END 
46.
pause >nul
Evinben
Bitte warten ..
Mitglied: bastla
17.03.2012 um 22:37 Uhr
Hallo evinben!

Es gibt ja keinen Zwang, alles in eine Zeile zu verwursten:
01.
for %%d in ( 
02.
 
03.
    Datenbank.exe  
04.
    ServiceDat.exe  
05.
 
06.
) do for /f %%f in ('tasklist /NH /FI "imagename eq %%d"') do ( 
07.
    if /i %%d==%%f ( 
08.
        if defined Meldung ( 
09.
            echo %Meldung% 
10.
            echo. 
11.
            set "Meldung=" 
12.
13.
        taskkill /F /IM  %%f 
14.
        set Gefunden=true 
15.
16.
)
Übrigens: Brauchst Du
if /i %%d==%%f
hinsichtlich
"imagename eq %%d"
wirklich?

Grüße
bastla
Bitte warten ..
Mitglied: evinben
18.03.2012 um 11:15 Uhr
Hallo Bastla,

vielen Dank für die Korrektur. Jetzt habe ich verstanden, dass ein IF-Befehl in Klammern, unabhängig davon ob sein Ergebnis WAHR oder FALSCH ist, die Verarbeitung der nächsten Befehle nicht ausschließt. Richtig?
Allerdings was ich noch nicht verstehe ist, warum bei so einer Variant wie von dir vorgeschlagen (eine logische Zeile aber auf mehreren physikalischen Zeilen verteilt) kein &-Verkettungszeichen erforderlich ist?
Bei der nachfolgenden Varianten ist das &-Verkettungszeichen dagegen unverzichtbar – ohne es kriege ich den Code nicht zum Laufen:
01.
for %%d in ( 
02.
EXCEL.EXE 
03.
WINWORD.EXE 
04.
) do for /f  %%f in ('tasklist /NH /FI "imagename eq %%d"') do if /i %%d==%%f (if defined Meldung (echo %Meldung% & set "Meldung=")) & echo. & taskkill /F /IM  %%f & set Gefunden=true
Zurück zu deiner letzten Frage:
da TaskList auch dann eine Antwort ausgibt, wenn kein Prozess gefunden wurde („INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt.“) hilft
01.
  
02.
if /i %%d==%%f
hier weiter, damit die folgenden Fehler-Zeilen, die im nächsten Schritt durch TaskKill generiert werden würden, auf dem Bildschirm nicht mehr erscheinen:
01.
FEHLER: Der Prozess "INFORMATION:" wurde nicht gefunden. 
02.
FEHLER: Der Prozess "INFORMATION:" wurde nicht gefunden. 
03.
FEHLER: Der Prozess "INFORMATION:" wurde nicht gefunden. 
04.
FEHLER: Der Prozess "INFORMATION:" wurde nicht gefunden.
Ein schönes Wochenende
Gruß
Evinben
Bitte warten ..
Mitglied: bastla
18.03.2012 um 11:45 Uhr
Hallo evinben!
Jetzt habe ich verstanden, dass ein IF-Befehl in Klammern, unabhängig davon ob sein Ergebnis WAHR oder FALSCH ist, die Verarbeitung der nächsten Befehle nicht ausschließt.
Abgesehen davon, dass es ja auch noch ein "else" gäbe, ist das "if" ja nur einer von mehreren Befehlen (in der Klammer), sodass der Rest tatsächlich nicht davon abhängt ...
eine logische Zeile aber auf mehreren physikalischen Zeilen verteilt
lässt sich mit umschließenden Klammern realisieren - dann wird tatsächlich alles zwischen den Klammern als eine einzige Anweisung (auch mit Konsequenzen hinsichtlich der Variablenauflösung) betrachtet ...
da TaskList auch dann eine Antwort ausgibt, wenn kein Prozess gefunden wurde („INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt.“)
Diese Ausgabe kannst Du ja verhindern:
01.
for %%d in ( 
02.
EXCEL.EXE 
03.
WINWORD.EXE 
04.
) do for /f  %%f in ('tasklist /NH /FI "imagename eq %%d" 2^>nul') do (if defined Meldung echo %Meldung% & set "Meldung=") & echo. & taskkill /F /IM  %%f & set Gefunden=true
Grüße
bastla

[Edit] Überflüssige Klammern entfernt [/Edit]
Bitte warten ..
Mitglied: evinben
18.03.2012 um 13:02 Uhr
Hallo bastla,

danke.

Diese Ausgabe kannst Du ja verhindern:
Es geht bei mir so nicht. So sieht es am CMD aus:
01.
C:\Windows\system32>tasklist /NH /FI "imagename eq blabla" 2>nul 
02.
INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt.
Wenn der Prozess nicht gefunden wurde, wird die Meldung mit 2>nul weiterhin ausgegeben, die eine Fehlermeldung im nächsten Schritt (bei TaskKill) verursacht.

evinben
Bitte warten ..
Mitglied: bastla
18.03.2012 um 15:26 Uhr
Hallo evinben!

Ich habe das nur unter XP SP3 getestet und mit der Umleitung Erfolg ...

... aber zur Not sollte bei Dir dann
tasklist /NH /FI "imagename eq blabla"|findstr /v /c:"INFORMATION: Es"
funktionieren (um das gleich "an der Quelle" abzufangen) ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
18.03.2012 um 16:10 Uhr
Hallo bastla,

daher kommt es also - alles klar. Findstr mit dem Schalter /V wäre hier auch eine saubere Lösung (aber nur solange keine Umlauten u. a. Sonderzeichen im Umlaufen sind).

Nun habe ich wieder etwas tolles gelernt und bin im Batch-Bereich ein Schritt weiter gekommen.

Bis demnächst wieder

Gruß
Evinben
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Warum funktioniert das echo in meiner for-Schleife auch mit Sonderzeichen?

gelöst Frage von PedantBatch & Shell9 Kommentare

Hallo, hier geht es um eine Verständnisfrage. Warum funktioniert das echo in der for-Schleife auch mit Sonderzeichen? Vorab echo ...

Batch & Shell

Batch Schleife als FOR-SCHLEIFE

gelöst Frage von mp2711Batch & Shell2 Kommentare

Mit den FOR-Schleifen habe ich mich leider bislang zu selten auseinander gesetzt, aber da ich sonst gerade nicht weiter ...

Batch & Shell

Die letzten 5 Zeilen aus einem Logfile auslesen und in umgekehrter chronologischer Reihenfolge mit Echo ausgeben

gelöst Frage von ZendaraBatch & Shell3 Kommentare

Hallo, Ich versuche einen Batch zu schreiben der eine IP anpingt und protokolliert sobald der Ping unterbrochen wird. Unteranderem ...

Batch & Shell

Benötige Hilfestellung beim abarbeiten meherer Dateien durch eine For Schleife

gelöst Frage von iGordonBatch & Shell1 Kommentar

Hallo, folgendes Problem. Ich erstelle mit einem Skript ein Backup einer Datenbank. Die Archive heissen dann: archiv_01_DatumDesBackups.zip, archiv_02_DatumDesBackups.zip Ich ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...