93578
Goto Top

Per Batch nach mehrere bestimmte Prozesse suchen???

Normalerweise verwende ich dafür folgendes:

echo Es wird nach Prozess gesucht.
echo --------------------------------------------- >> Berichte\MyLog.txt
echo %date% %time:~0,8% Die Suche nach Prozess wird gestartet. >> Berichte\MyLog.txt
echo --------------------------------------------- >> Berichte\MyLog.txt
qprocess | find /i "kies.exe"  > NUL: 1>&2  
if errorlevel 1 goto :starten
echo Es wurde Prozess "kies.exe" gefunden. >> Berichte\MyLog.txt  
:starten
echo Prozess "kies.exe" wurde nicht gefunden. >> Berichte\MyLog.txt  

Was ist aber, wenn ich nach weitere 10-15 bestimmte Prozessen suchen will (sagen wir: notepad.exe, ccc.exe, word.exe, excel.exe usw.) und positive Ergebnisse zu jedem einzelnem in der Textdatei "MyLog.txt" speichern will bzw. wenn kein einziges Prozess gefunden wird, dass dort eine allegemeine Meldung "Es wurden keine Prozesse gefunden" gespeichert wird?

Eventuell könnten die Namen von Prozessen in einer txt-Datei gespeichert sein, um diese leicht zu editieren. Aber wie ich das organisiere?

Danke,
takeshi.

Content-Key: 197729

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

Printed on: April 25, 2024 at 10:04 o'clock

Member: bastla
bastla Jan 27, 2013 updated at 19:41:00 (UTC)
Goto Top
Hallo takitano!

Etwa so (ungetestet):
set "Log=Berichte\MyLog.txt"  
set Prozesse="kies.exe" "notepad.exe" "ccc.exe" "word.exe" "excel.exe"  
set "Meldung=Es wurden keine Prozesse gefunden."  

echo Es wird nach Prozessen gesucht.
>>"%Log%" echo -----------------------------------------------  
>>"%Log%" echo %date% %time:~0,8% Die Suche nach Prozessen wird gestartet.  
>>"%Log%" echo -----------------------------------------------  
(for %%i in (%Prozesse%) do (
    qprocess | find /i %%i  > NUL: 1>&2 && (
        echo Es wurde Prozess %%i gefunden.
        set "Meldung="  
    ) || (
        echo Prozess %%i wurde nicht gefunden.
    )
))>>"%Log%"  
if defined Meldung >>"%Log%" echo %Meldung%  
Wenn Du die Prozesse aus einer Textdatei einlesen willst, etwa so:
set "Log=Berichte\MyLog.txt"  
set "Prozesse=D:\Prozessliste.txt"  
set "Meldung=Es wurden keine Prozesse gefunden."  

echo Es wird nach Prozessen gesucht.
>>"%Log%" echo -----------------------------------------------  
>>"%Log%" echo %date% %time:~0,8% Die Suche nach Prozessen wird gestartet.  
>>"%Log%" echo -----------------------------------------------  
(for /f "usebackq delims=" %%i in ("%Prozesse%") do (  
    qprocess | find /i "%%i"  > NUL: 1>&2 && (  
        echo Es wurde Prozess "%%i" gefunden.  
        set "Meldung="  
    ) || (
        echo Prozess "%%i" wurde nicht gefunden.  
    )
))>>"%Log%"  
if defined Meldung >>"%Log%" echo %Meldung%  
Grüße
bastla
Mitglied: 93578
93578 Jan 28, 2013 at 16:04:47 (UTC)
Goto Top
Danke Bastla!
Mitglied: 93578
93578 Jan 29, 2013 updated at 16:48:05 (UTC)
Goto Top
Hallo Bastla,
kann man deinen Batch ein bisschen ändern? Ich habe mich falsch ausgedruckt - ich will nicht die nicht gefundene Prozesse in der Log-Datei einzeln auflisten, sondern nur allgemein dort schreiben, dass "Es wurden keine Prozessen gefunden". Dafür aber soll auch im CMD-Fenster die gleiche Nachricht kommen (momentan wird sie dort nicht angezeigt). Falls es aber ein Prozess gefunden wird, soll alles so bleiben wie es schon schön ist. Mein Problem - ich habe die Liste mit fast 100 Prozessen und brauche es doch nicht, die nicht gefundene Prozesse einzeln aufzulisten.
Member: bastla
bastla Jan 29, 2013 at 16:51:15 (UTC)
Goto Top
Hallo takitano!
ich will nicht die nicht gefundene Prozesse in der Log-Datei einzeln auflisten, sondern nur allgemein dort schreiben, dass "Es wurden keine Prozessen gefunden"
Falls es aber ein Prozess gefunden wird, soll alles so bleiben wie es schon schön ist.
Hört sich etwas widersprüchlich an - was genau ist denn nun Dein Wunschergebnis (in Datei und im Fenster)?

Grüße
bastla
Mitglied: 93578
93578 Jan 29, 2013 updated at 18:12:57 (UTC)
Goto Top
1) Falls 1 oder mehrere Prozess vorhanden sind:
- im CMD-Fenster werden die gefundene Prozesse durch qprocess automatisch angezeigt. Dort braucht man nichts tun.
- in der Log-Datei werden sie dann namentlich aufgelistet - es funktoniert jetzt schon.

2) Falls gar keine Prozesse gefunden wurden:
- im CMD-Fenster möchte ich die entsprechende Meldung haben "Es wurden keine Prozesse gefunden". Momentan wird in diesem Fall da nichts angezeigt.
- in der Log-Datei steht momentan in diesem Fall folgendes:

Prozess 1 wurde nicht gefunden.
Prozess 2 wurde nicht gefunden.
...
Prozess 99 wurde nicht gefunden.
Es wurden keine Prozesse gefunden.

Ich will diese Auflistung von 99 einzelnen Prozessen nicht, sondern, dass dort nur die letzte Zeile steht: "Es wurden keine Prozesse gefunden."

Grüße,
Takeshi
Member: bastla
bastla Jan 29, 2013 at 18:20:02 (UTC)
Goto Top
Hallo takitano!

set "Log=Berichte\MyLog.txt"  
set "Prozesse=D:\Prozessliste.txt"  
set "Meldung=Es wurden keine Prozesse gefunden."  

echo Es wird nach Prozessen gesucht.
>>"%Log%" echo -----------------------------------------------  
>>"%Log%" echo %date% %time:~0,8% Die Suche nach Prozessen wird gestartet.  
>>"%Log%" echo -----------------------------------------------  
(for /f "usebackq delims=" %%i in ("%Prozesse%") do (  
    qprocess | find /i "%%i"  > NUL: 1>&2 && (  
        echo Es wurde Prozess "%%i" gefunden.  
        set "Meldung="  
    )
))>>"%Log%"  
if defined Meldung (
    >>"%Log%" echo %Meldung%  
    echo %Meldung%
)
Grüße
bastla
Mitglied: 93578
93578 Jan 30, 2013 updated at 12:15:49 (UTC)
Goto Top
Das hat gut geklappt! Vielen Dank, bastla!

Und noch eine letze Frage: ich starte der Script von einem USB-Stick auf verschiedenen Rechner. Standardgemäß werden dabei die Programme "qprocess" und "find" auf dem Rechner benutzt.

Was ist wenn diese Programme aber auf dem Rechner fehlen bzw. manipuliert sind (z.B. "sysinfo" funktioniert auf einem XP Home-Rechner nicht, da es dort fehlt)? Deswegen will ich die originale Programme "qprocess" und "find" im Verzeichnis "XY" auf dem USB-Stick haben und nur meine originale Programme aus diesem Verzeichnis benutzen.

Ich habe bis jetzt folgendes versucht:

start XY\qprocess | XY\find /i
start XY\qprocess | find /i 
 XY\qprocess | XY\find /i
start XY\qprocess | start XY\find /i

Es klappte aber nicht.
Member: bastla
bastla Jan 30, 2013 at 16:46:53 (UTC)
Goto Top
Hallo takitano!

Ob die Programme überhaupt starten, musst Du selbst testen - versuchen könntest Du jedenfalls
%~d0\XY\qprocess | %~d0\XY\find /i
Grüße
bastla
Mitglied: 93578
93578 Jan 30, 2013 updated at 17:03:40 (UTC)
Goto Top
Danke. Ja, sie starten, Allerdings kommt dann xx Mal Fehlermeldung (entsprechend der Anzall von Zeilen im "Prozessliste.txt") im CMD-Fenster:

{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}
{Message(): LoadString failed, Error 15105, (0x00003B01)}

und am Ende 1 gefundener Prozess:
pc-takitano console 1 2820 dwm.exe

In der Log.txt-Datei steht aber alles richtig (ohne oben genannten Fehlermeldungen):

30.01.2013 17:50:19 Die Suche nach Prozessen wird gestartet
Es wurde Prozess "dwm.exe" gefunden.
Mitglied: 93578
93578 Jan 31, 2013 at 02:43:30 (UTC)
Goto Top
Hallo Bastla,

{Message(): LoadString failed, Error 15105, (0x00003B01)}

ist es möglich diese Meldung im CMD-Fenster irgendwie unterdrucken?
Member: bastla
bastla Jan 31, 2013 at 07:51:20 (UTC)
Goto Top
Hallo takitano!

Wenn ein
%~d0\XY\qprocess 2>nul
nicht funktioniert, vermutlich nicht ...

Grüße
bastla
Mitglied: 93578
93578 Jan 31, 2013 updated at 08:32:38 (UTC)
Goto Top
Trotzdem - DANKE! Anstatt qprocess habe ich tasklist genommen. Jetzt funktioniert alles.