Batch Kommandozeilenparameter als START Pfad mit Leerzeichen
Hallo,
habe gesucht und nicht gefunden.
Was passieren soll:
Ich möchte meine CMD mit zwei Parametern aufrufen.
Dann wird geprüft ob das Programm schon läuft, wenn nicht soll es gestartet werden.
Das funktioniert (auch dank pslist) solange, bis der Programmpfad Leerzeichen enthält.
Das hier hat nicht geklappt, ich
bekomme trotzdem eine Fehlermeldung "Pfad nicht gültig"...
Hier mein aktueller Code mit Bitte um Hilfe, danke.
habe gesucht und nicht gefunden.
Was passieren soll:
Ich möchte meine CMD mit zwei Parametern aufrufen.
Dann wird geprüft ob das Programm schon läuft, wenn nicht soll es gestartet werden.
Das funktioniert (auch dank pslist) solange, bis der Programmpfad Leerzeichen enthält.
Das hier hat nicht geklappt, ich
bekomme trotzdem eine Fehlermeldung "Pfad nicht gültig"...
Hier mein aktueller Code mit Bitte um Hilfe, danke.
@echo off
REM Prameter von der Kommandozeile holen
set Suchname=%1
set Programm=%2
REM Fehlt ein Parameter dann Ende
if "%1"=="" goto :ENDE
if "%2"=="" goto :ENDE
REM PSLIST ist ein Tool von SysInternals (http://technet.microsoft.com/de-de/sysinternals/bb896682.aspx)
REM Nur damit ist die Abfrage der Prozesse möglich.
pslist |find /i "%Suchname%" >nul
REM Verzweigung, je nach Ergebnis
if %errorlevel% == 0 (
REM Das Programm laeuft bereits und nichts wird gemacht
) else (
REM Das Programm laeuft nicht und wird deshalb gestartet
start "" /D%Programm%
)
:ENDE
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 116398
Url: https://administrator.de/contentid/116398
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo WiSch!
Und so?
Noch als Anmerkung zu "Nur damit ist die Abfrage der Prozesse möglich.": Soferne Dein (nicht genanntes) BS mindestens XP ist, hättest Du auch "tasklist" zur Verfügung ...
Grüße
bastla
Und so?
@echo off & setlocal
REM Prameter von der Kommandozeile holen
set "Suchname=%~1"
set "Programm=%~2"
REM Fehlt ein Parameter dann Ende
if not defined Programm goto :eof
REM PSLIST ist ein Tool von SysInternals (http://technet.microsoft.com/de-de/sysinternals/bb896682.aspx)
REM Nur damit ist die Abfrage der Prozesse möglich.
pslist |find /i "%Suchname%" >nul
REM Verzweigung, je nach Ergebnis
if %errorlevel% == 0 (
REM Das Programm laeuft bereits und nichts wird gemacht
) else (
REM Das Programm laeuft nicht und wird deshalb gestartet
start "" /D"%Programm%"
)
Grüße
bastla
@WiSch
Ich würde ja das Vorhandensein eines notwendigen Tools überprüfen anstatt es nur im REM zu erwähnen.
Die Logik des Batches würde auch das Programm starten wenn PSList gar nicht vorhanden ist.
IMO ist es sinnvoller eine erläuternde Fehlermeldung vorzubereiten und im Fehlerfall auszugeben.
Das ist dann im Programmcode auch genauso sichtbar.
Also hier mein Vorschlag
Gruß
LotPings
Ich würde ja das Vorhandensein eines notwendigen Tools überprüfen anstatt es nur im REM zu erwähnen.
Die Logik des Batches würde auch das Programm starten wenn PSList gar nicht vorhanden ist.
IMO ist es sinnvoller eine erläuternde Fehlermeldung vorzubereiten und im Fehlerfall auszugeben.
Das ist dann im Programmcode auch genauso sichtbar.
Also hier mein Vorschlag
@echo off & setlocal
REM Prameter von der Kommandozeile holen
set "Suchname=%~1"
set "Programm=%~2"
set ErrMsg=Usage: %~f0 Suchname Programm Fehlt ein Parameter dann Ende
if not defined Programm Echo %ErrMsg% & Pause & Exit /B 1
set ErrMsg=PSLIST ist ein für diese Batchdatei zwingend notwendiges Tool von SysInternals.
set ErrMsg=%ErrMsg% (http://technet.microsoft.com/de-de/sysinternals/bb896682.aspx)
(set MyPath=.;%Path%)&IF defined PSList set "PSList="
for /F "delims=" %%A in ("pslist.exe") do set "PSList=%%~$MyPath:A"
IF Not Defined PSList echo %ErrMsg% & Pause & Exit /B 2
set ErrMsg=Programm %Programm läuft bereits, wird nicht nochmal gestartet.
"%PSList%" |find /i "%Suchname%" >nul &&Echo %ErrMsg% & Exit /B 3
REM Das Programm laeuft nicht und wird deshalb gestartet
start "" /D"%Programm%"
Gruß
LotPings