Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Batch kontrolliert, ob ein Task gestartet ist, und startet ein Program

Frage Entwicklung Batch & Shell

Mitglied: imkrl001

imkrl001 (Level 1) - Jetzt verbinden

13.11.2007, aktualisiert 15.11.2007, 8848 Aufrufe, 4 Kommentare

Hallo,
bin neu hier, und habe leider wenug Erfahrung mit Batch-Datein...

kann jemand eine Batch-Datei erzeugen, die ständig läuft
(kann auch alternativ minutlich als 'Geplannten Task' gestartet werden)
und minutlich abfragt, ob ein bestimmtes Program(Task: hier scgui32.exe) läuft,
dann, wenn das Program läuft, wird ein weiteres Program (hier c:\temp\cercala.exe) gestartet und das 1. Program (scgui32.exe) gekillt.

Hintergrund: das 1. Program wird nicht wahrgenommen welches aus einer Anwendung gelegentlich gestartet wird. Damit es akustisch und visuell Wahrgenommen werden kann, wird das 2. Program gestartet. Damit das ganze auch ein weiteres mal klappt, muß das 1. Program wieder geschlossen werden.

Danke im vorraus
Mitglied: bastla
13.11.2007 um 13:39 Uhr
Hallo imkrl001 und willkommen im Forum!

Da Du Dein Betriebssystem nicht genannt hast, unterstelle ich einmal XP oder später (ich war versucht, "höher" zu schreiben, fand das aber im Hinblick auf Vista nicht unbedingt angemessen).

Ein Endlosbatch dafür könnte so aussehen:
01.
@echo off & setlocal 
02.
set "Tsk=scgui32.exe" 
03.
set "Prog=c:\temp\cercala.exe" 
04.
 
05.
:Loop 
06.
set Running= 
07.
for /f %%i in ('tasklist') do echo (%%i)|findstr /C:"(%Tsk%)" >nul && set Running=True 
08.
if not defined Running goto :Pause 
09.
 
10.
start "" "%Prog%" 
11.
taskkill /IM "%Tsk%" >nul 
12.
 
13.
:Pause 
14.
::15 s Pause 
15.
ping -n 15 localhost>nul 
16.
goto :Loop
Falls Du die Pause zwischen den Überprüfungen nicht benötigst, einfach "::" vor die Zeile "ping ..." schreiben - damit wird die Zeile zum Kommentar und nicht ausgeführt (natürlich kannst Du sie auch ganz entfernen, wenn Du sie sicher nicht brauchen wirst).

Grüße
bastla
Bitte warten ..
Mitglied: imkrl001
15.11.2007 um 07:08 Uhr
Ja, klappt super. Tausend dank...


Mir fällt gerade noch ne Möglichkeit ein, die Batch zu nutzen...

Kann man die Batch so umschreiben, das sie erkennt, wenn eine bestimmte Task mehr als einmal läuft (also 2 mal) und dann ein Program startet, evt. auch dann noch die neuere der beiden Task killt ??
Bitte warten ..
Mitglied: imkrl001
15.11.2007 um 09:48 Uhr
OK, habe selber ein wenig Programmiert... und eine Lösung gefunden....

die 2. Task mit gleichen Namen hat in der Taskleist einen anderen Namen, den man abfragen kann...

01.
@echo off & setlocal 
02.
set "Prog=c:\temp\cercala1.exe" 
03.
 
04.
:Loop 
05.
set Running= 
06.
for /f %%i in ('tasklist /FI "WINDOWTITLE eq Active Notes"') do echo (%%i)|findstr /C:======= >nul && set Running=True 
07.
if not defined Running goto :Pause 
08.
 
09.
start "" "%Prog%" 
10.
taskkill /FI "WINDOWTITLE eq Active Notes" >nul 
11.
 
12.
:Pause 
13.
::30 s Pause 
14.
ping -n 30 localhost>nul 
15.
goto :Loop 
16.
 
kann man das noch was verschönern ??
die Ausgabe ins echo -> '
'
gefällt mit nicht,
evt kann man auch den "WINDOWTITLE eq Active Notes" als Kürzrl hinterlegen...
Bitte warten ..
Mitglied: bastla
15.11.2007 um 19:17 Uhr
Hallo imkrl001!

Für die Anforderung "wenn eine bestimmte Task mehr als einmal läuft ... ein Program startet, ... die neuere der beiden Task killt" würde ich eher auf VBScript zurückgreifen. Ebenfalls als Endlosschleife laufend könnte das so aussehen:
01.
strTask = "scgui32.exe" 
02.
strProg = "c:\temp\cercala.exe" 
03.
 
04.
Set WshShell = WScript.CreateObject("WScript.Shell") 
05.
strComputer = "."  
06.
 
07.
Do 
08.
	Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
09.
	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48)  
10.
	strOldest = "9" 
11.
	For Each objItem in colItems 
12.
		If LCase(objItem.Name) = strTask Then 
13.
			If objItem.CreationDate < strOldest Then strOldest = objItem.CreationDate 
14.
		End If 
15.
	Next 
16.
	 
17.
	bRun = False 
18.
	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48)  
19.
	For Each objItem in colItems 
20.
		If LCase(objItem.Name) = strTask Then 
21.
			If objItem.CreationDate <> strOldest Then 
22.
				objItem.Terminate 
23.
				bRun = True 
24.
			End If 
25.
		End If 
26.
	Next 
27.
 
28.
	If bRun Then WshShell.Run strProg 'Programm starten 
29.
 
30.
	WScript.Sleep 30000 '30 Sekunden Pause 
31.
Loop
Das Script killt alle "scgui32.exe"-Tasks mit Ausnahme des ältesten (festgestellt anhand des "CreationDate" im Format "20071115191028.750000+060") und startet für den Fall, dass zumindest ein Task beendet werden musste (und demnach gleichzeitig mindestens zwei aktiv waren) das angegebene Programm ("cercala.exe"). Beendet wird dieses Programm allerdings nicht wieder durch das Script, sodass also zwar nach spätestens 30 Sekunden immer nur ein "scgui32.exe"-Task läuft, es aber viele "cercala.exe"-Tasks geben könnte.

Das Script selbst läuft übrigens als Task "wscript.exe" (nur für den Fall, dass Du es auch wieder beenden wolltest ).

In diesem Zusammenhang wäre vielleicht auch noch ein Hinweis auf den "ProcessExplorer" (einstmals von "SysInternals", jetzt MS) angebracht. Damit kannst Du die laufenden Tasks viel besser, als dies mit dem Taskmanager oder über die Kommandozeile möglich ist, überblicken.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell oder Batch-Task: Kopiere Datei x mal und benenne diese um (2)

Frage von Lorderich zum Thema Batch & Shell ...

Windows Server
gelöst Batch-Datei startet in der Aufgabenplanung nicht (12)

Frage von koehlo zum Thema Windows Server ...

Windows 10
gelöst PC startet nach Task herunterfahren nicht mehr automatisch (15)

Frage von Diddi-tb zum Thema Windows 10 ...

Windows Server
gelöst Active Directory File Extension - Associated Program (11)

Frage von adm2015 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...