Batch soll überprüfen, ob Windows-Explorer gestartet ist
Hallo zusammen,
ich würde gerne in einer Batch überprüfen, ob der Windows-Explorer (Dateimanager) gestartet ist (unter Win7prof. x64).
Super wäre ein Überprüfung, ob der Explorer in einem bestimmten Pfad läuft, z.B. f:\temp
Die erste Idee war mit tasklist oder taskkill. Um es mir einfacher zu machen, habe ich hier was aus dem Forum genommen:
Funktioniert super, sofern man NICHT den Explorer sucht, denn der läuft im Taskmanager, unter "Prozesse" immer.
Wenn ich den Explorer öffne, dann erscheint im Task-Manager --> Reiter "Anwendungen" ein neues Programm. Dieses heißt dann so wie das Verzeichnis, das man im Explorer angeklickt hat.
Leider konnte ich tasklist nicht davon überzeugen, auch "Anwendungen" zu suchen.
Gibt es eine Möglichkeit, in einer Batch zu überprüfen, ob die "Anwendung TEMP" (Verzeichnis f:\temp) läuft?
Vielen Dank,
Frank
ich würde gerne in einer Batch überprüfen, ob der Windows-Explorer (Dateimanager) gestartet ist (unter Win7prof. x64).
Super wäre ein Überprüfung, ob der Explorer in einem bestimmten Pfad läuft, z.B. f:\temp
Die erste Idee war mit tasklist oder taskkill. Um es mir einfacher zu machen, habe ich hier was aus dem Forum genommen:
set Programm=explorer
tasklist |find /i "%Programm%" >nul
if %errorlevel% == 0 (
echo Das Programm "%Programm%" leauft gerade!
) else (
echo Das Programm "%Programm%" leauft gerade nicht!
)
Funktioniert super, sofern man NICHT den Explorer sucht, denn der läuft im Taskmanager, unter "Prozesse" immer.
Wenn ich den Explorer öffne, dann erscheint im Task-Manager --> Reiter "Anwendungen" ein neues Programm. Dieses heißt dann so wie das Verzeichnis, das man im Explorer angeklickt hat.
Leider konnte ich tasklist nicht davon überzeugen, auch "Anwendungen" zu suchen.
Gibt es eine Möglichkeit, in einer Batch zu überprüfen, ob die "Anwendung TEMP" (Verzeichnis f:\temp) läuft?
Vielen Dank,
Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264533
Url: https://administrator.de/contentid/264533
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo Frank,
mit Powershell-Hilfe ein Einzeiler für die Batch, schließt alle Explorer-Fenster außer der Login-Shell (wäre ja auch blöd sich den Teppich unter den Füßen wegzuziehen ):
Wenn nur ein Fenster mit einem bestimmten Title geschlossen werden soll geht das auch:
(Hinweis: Das Beispiel setzt voraus das im Explorer eingestellt ist das der ganze Pfad in der Titelleiste erscheint. Ansonsten muss man halt nur nach dem letzten Teil des Ordners temp filtern - hier kann man auch mit regex arbeiten es stehen einem alle Möglichkeiten der Powershell offen)
Grüße Uwe
mit Powershell-Hilfe ein Einzeiler für die Batch, schließt alle Explorer-Fenster außer der Login-Shell (wäre ja auch blöd sich den Teppich unter den Füßen wegzuziehen ):
powershell -Executionpolicy Bypass -Command "&{gwmi Win32_Process -Filter \"Name = 'explorer.exe'\" | ?{$_.Commandline -ne 'C:\windows\explorer.exe'} | %{$_.Terminate()}}"
(Hinweis: Das Beispiel setzt voraus das im Explorer eingestellt ist das der ganze Pfad in der Titelleiste erscheint. Ansonsten muss man halt nur nach dem letzten Teil des Ordners temp filtern - hier kann man auch mit regex arbeiten es stehen einem alle Möglichkeiten der Powershell offen)
powershell -Executionpolicy Bypass -Command "&{Get-Process | ?{$_.Name -eq 'explorer' -and $_.MainWindowTitle -eq 'f:\temp'} | Stop-Process -Force}"
Zitat von @kaeptenblei:
Wenn ich deine Zeile oben in eine Batch kopiere, passiert bei mir leider nichts (schließt keine Explorer Fenster).
Im unteren Befehl hatte ich noch was korrigiertWenn ich deine Zeile oben in eine Batch kopiere, passiert bei mir leider nichts (schließt keine Explorer Fenster).
Muss allerdings gestehen, dass ich mit Powershell bisher so gut wie nichts zu tunen hatte. Aber so weit ich weiss, kann ich doch
den powershell-Befehl im CMD Fenster aufrufen - als auch aus einer Batch heraus - oder?
Ja, deswegen habe ich sie so geschrieben das du sie ohne in eine Powershell zu wechseln ausprobieren kannst.den powershell-Befehl im CMD Fenster aufrufen - als auch aus einer Batch heraus - oder?
Funktionieren hier beide einwandfrei.
ich möchte eigentlich nicht die Explorer-Fenster schliessen, ich will nur wissen, ob es läuft (am besten in einem bestimmten Verzeichnis).
Auch kein Problem, vorausgesetzt der Explorer ist so konfiguriert das der komplette Pfad im Title des Fensters steht, ansonsten gilt das im letzten Post dazu genannte.powershell -Executionpolicy Bypass -Command "&{if (Get-Process | ?{$_.Name -eq 'explorer' -and $_.MainWindowTitle -eq 'f:\temp'}){write-host 'Fenster existiert'}else{write-host 'Fenster existiert nicht'}}"
powershell -Executionpolicy Bypass -Command "&{if (Get-Process | ?{$_.Name -eq 'explorer' -and $_.MainWindowTitle -eq 'temp'}){write-host 'Fenster existiert'}else{write-host 'Fenster existiert nicht'}}"
Noch als kleine Einführung in Powershell-Scripte und deren Ausführung:
Anleitung: Wie starte ich Powershell-Scripte
- Zuerst speichert man den Code in einer Textdatei mit der Endung .ps1.
- Wenn man zum ersten mal Powershell-Scripte ausführt, musst man einmalig vorher noch das Ausführen von Scripten im User-Account freischalten. Dazu öffnet man eine Powershell-Konsole und gibt dort den Befehl
Set-ExecutionPolicy RemoteSigned -Force
ein. Um diese Policy für alle User auf dem Rechner zu setzen muss man diesen Befehl in einer Powershell-Konsole mit Admin-Rechten starten. Noch ein Hinweis für 64-Bit-Systeme: Hier sollte sowohl für die 32bit und 64Bit Variante der Powershell die Policy in einer Admin-Konsole gesetzt werden:Set-ExecutionPolicy RemoteSigned -Force; start-job { Set-ExecutionPolicy RemoteSigned -Force } -RunAs32
- Jetzt kann das Powershell-Script wie weiter unten erläutert in einer Powershell-Konsole oder aus einer CMD-Fenster heraus ausgeführt werden. Wer lieber mit der Maus arbeitet macht einen Rechtsklick auf die Script-Datei und wählt: Mit Powershell ausführen.
- Alternativ lässt sich ein Script auch ohne das globale Ändern der ExecutionPolicy ausführen indem man die Policy als Parameter auf der Kommandozeile mitgibt:
powershell.exe -ExecutionPolicy RemoteSigned -File "C:\Pfad\Script.ps1"
Starten eines Scriptes in einer Powershell-Konsole
Immer den kompletten Pfad zum Script angeben, und wenn er Leerzeichen beinhaltet in Anführungszeichen einschließen:"C:\Pfad\script.ps1"
.\script.ps1
Starten von PS-Scripten aus Batch und Kommandozeilen heraus:
Hier gibt es unterschiedliche Methoden, je nach Anforderungen gibt es hier einige Besonderheiten vor allem bei Leerzeichen in Pfaden zu beachten!Der einfachste Aufruf sieht hier so aus:
powershell.exe -File "C:\Pfad\Script.ps1"
powershell.exe -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"
powershell.exe -command "&'C:\Pfad\Script.ps1' -par1 'Wert1' -par2 'Wert2'"
powershell.exe -command "&'C:\Pfad\Script1.ps1';&'C:\Pfad\Script2.ps1'"
powershell -?
in einer Konsole an.Starten von PS-Scripten in der Aufgabenplanung (Taskplaner)
In der jeweiligen Aktion unter "Programm/Script" trägt man powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man wie oben geschrieben alles was hinter powershell.exe kommt ein - also z.B. -File "C:\Pfad\Script.ps1" "Parameter 1" "Parameter 2"Zitat von @kaeptenblei:
Mit beiden Befehlen versucht, das Ausführen von Scripten im User-Account freischalten:
Das ist alles OK ... ist aber normalerweise nicht nötig da die Executionpolicy in den obigen Commands stumm geschaltet wird ...Mit beiden Befehlen versucht, das Ausführen von Scripten im User-Account freischalten:
Leider kommt IMMER die Meldung, dass das Fenster nicht existiert. Egal ob der Explorer geöffnet ist, oder nicht.
Welches OS? Wurden hier alle auf Win7/Win8.1(x64) erfolgreich getestet.Ahh moment (vergessen zu erwähnen), schalte in den Explorer-Optionen ein, dass jedes Explorer-Fenster in einem eigenen Prozess gestartet wird (ist sowieso eine Empfehlung) ! WICHTIG: Danach alle Fenster schließen und neu öffnen! Dann läuft es auch bei dir ...
Grüße Uwe