Per Batch prüfen ob ein Prozess läuft und ggf. beenden erzwingen

Schnipp

Lt. Commander
Registriert
Feb. 2004
Beiträge
1.138
Hallo zusammen,

ich möchte per Kommandozeile/Skript gerne folgendes realisieren:

  • es soll geprüft werden, ob bestimmte Prozesse aktiv sind (z.B. WINWORD.EXE)
  • diese sollen dann beenden werden (ohne Rückfrage)
  • danach sollen Ordnerinhalte ohne Rückfrage gelöscht werden (sofern möglich)

Ist vermutlich nur ein 3- oder 4-Zeiler, ich steh mir aber dermaßen auf dem Schlauch. Hab schon mit TASKLIST und TASKKILL ein wenig probiert, aber bin nicht wirklich weiter gekommen.

Gruß Schnipp
 
Hallo,

das solltest du mit Boardmittel hin bekommen. Helfen wird dir der Befehl FIND und dazu eine FOR SCHLEIFE.
http://www.robvanderwoude.com/find.php

Beispiel: TASKLIST | FIND /I "EXPLORER.EXE" mal im CMD eingeben.

Hier mal eine FOR Schleife die in diesem Fall den Hardwarehersteller ausliest und den Wert als Variable schreibt.

FOR /F "tokens=2 delims==" %%A IN ('wmic csproduct get Vendor /VALUE ^| FIND /I "VENDOR="') DO SET VENDOR=%%A
IF /I "%VENDOR%" == "LENOVO" (goto INSTALL) ELSE (goto ENDE)

Gruß
Tronixs
 
Schnipp schrieb:
  • es soll geprüft werden, ob bestimmte Prozesse aktiv sind (z.B. WINWORD.EXE)
  • diese sollen dann beenden werden (ohne Rückfrage)

Code:
tasklist /FI "IMAGENAME eq WINWORD.EXE" 2>NUL | find /I /N "WINWORD.EXE">NUL
if "%ERRORLEVEL%"=="0" taskkill /F /IM WINWORD.EXE

Schnipp schrieb:
  • danach sollen Ordnerinhalte ohne Rückfrage gelöscht werden (sofern möglich)

Code:
del /F /Q "C:\Ordnername\*.*"
 
Zuletzt bearbeitet:
Hallo,

und als Spielerei mit der Powershell könnte es so aussehen:

Code:
$process = @("WINWORD", "EXCEL")
$path = @("C:\Temp\Word", "C:\Temp\Excel")
$process_active = $false

# Prüfen ob alle eingetragenen Prozesse aktiv sind

$process | ForEach-Object {
	
	if (Get-Process -Name $_ -ErrorAction 'SilentlyContinue' -WarningAction 'SilentlyContinue') { $process_active = $true }
	else { $process_active = $false }
}

# Falls alle aktiv sind werden diese erst gestoppt und danach alle Dateien unter den eingetragenen Pfaden gelöscht

if ($process_active) {
	
	$process | ForEach-Object {
		
		Stop-Process -Name $_
	}
	
	$path | ForEach-Object {
			
		if (Test-Path -Path $_ -ErrorAction 'SilentlyContinue' -WarningAction 'SilentlyContinue') { #Prüfen ob der Pfad existiert
			
			$path_to_delete = $_ + "\*"
			Remove-Item -Path $path_to_delete #falls Unterverzeichnisse (und deren Dateien) gelöscht werden sollen zusätzlich -recurse
		}
	}
}
 
Danke, der Code von cypher85 ist absolut ausreichend für meine Zwecke!

Allerdings muss ich bei dem DEL-Befehl immer wieder feststellen, dass am Ende doch keine Dateien aus dem Ordner gelöscht wurden, obwohl sie weder versteckt noch schreibgeschützt sind ...
 
Schnipp schrieb:
Danke, der Code von cypher85 ist absolut ausreichend für meine Zwecke!

Allerdings muss ich bei dem DEL-Befehl immer wieder feststellen, dass am Ende doch keine Dateien aus dem Ordner gelöscht wurden, obwohl sie weder versteckt noch schreibgeschützt sind ...

Du kannst ja mal versuchen den kompletten Ordner zu löschen und diesen dann neu zu erstellen.

Code:
RMDIR /S /Q "C:\Ordnername"
MKDIR "C:\Ordnername"
 
Zurück
Oben