wisch
Goto Top

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"... face-sad

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

Content-ID: 116398

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

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

bastla
bastla 19.05.2009 um 15:56:39 Uhr
Goto Top
Hallo WiSch!

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%"  
) 
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
miniversum
miniversum 19.05.2009 um 15:58:46 Uhr
Goto Top
Ändere mal
set Programm=%2
in
set Programm="%~2"
WiSch
WiSch 19.05.2009 um 16:26:05 Uhr
Goto Top
Weder die Schreibweise
set "programm=%~2"  
noch
set programm="%~2"  

führen zum gewünschten Ergebnis.

Zum BS: Ist XP und soll auch unter Win 2003 Server laufen
"tasklist" funktioniert auch, so brauche ich wenigstens kein zusätzliches Tool, danke.

Habe es mit folgendem Aufruf am Prompt probiert:
einfachstart.cmd iexplore "C:\Programme\Internet Explorer\iexplore.exe"  

und bekomme dann folgende Meldung zurück:
Das aktuelle Verzeichnis ist ungültig.
bastla
bastla 19.05.2009 um 16:30:50 Uhr
Goto Top
Hallo WiSch!

Sorry, leider nur oberflächlich gelesen ...

Versuch es mit folgender Zeile 18:
start "" "%Programm%"
Grüße
bastla
WiSch
WiSch 19.05.2009 um 16:43:08 Uhr
Goto Top
Es läuft!

Danke, hatte dieses /D in oben verlinktem Beitrag gefunden und deshalb übernommen...

Hier das lauffähige Script "Einfachstart.cmd" wie er jetzt eingesetzt wird:

REM Prameter von der Kommandozeile holen
set "Suchname=%~1"   
set "Programm=%~2"  

REM Fehlt ein Parameter dann Ende
if not defined Programm goto :ENDE 

REM Taskliste durchsuchen nach dem zu startenden Programm
tasklist |find /i "%Suchname%" >nul   

REM Verzweigung, je nach Ergebnis
if %errorlevel% == 0 ( 
  REM Das Programm laeuft bereits: Nichts machen
) else ( 
  REM Das Programm laeuft nicht: Programm starten 
  start "" "%Programm%"  
)

:ENDE
REM exit

Aufruf z.B. so:
einfachstart iexplore "c:\programme\internet explorer\iexplore.exe"  


//Edit:
@77559: Werde Deine Empfehlungen noch berücksichtigen, aber es läuft erst einmal so und das war (zeitlich) wichtig... Danke.
77559
77559 19.05.2009 um 16:45:52 Uhr
Goto Top
@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
@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