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
GELÖST

Batch Kommandozeilenparameter als START Pfad mit Leerzeichen

Frage Entwicklung Batch & Shell

Mitglied: WiSch

WiSch (Level 1) - Jetzt verbinden

19.05.2009, aktualisiert 15:42 Uhr, 12417 Aufrufe, 6 Kommentare

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.
@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
Mitglied: bastla
19.05.2009 um 15:56 Uhr
Hallo WiSch!

Und so?
01.
@echo off & setlocal   
02.
REM Prameter von der Kommandozeile holen  
03.
set "Suchname=%~1" 
04.
set "Programm=%~2" 
05.
 
06.
REM Fehlt ein Parameter dann Ende  
07.
if not defined Programm goto :eof   
08.
 
09.
REM PSLIST ist ein Tool von SysInternals (http://technet.microsoft.com/de-de/sysinternals/bb896682.aspx)  
10.
REM Nur damit ist die Abfrage der Prozesse möglich.  
11.
pslist |find /i "%Suchname%" >nul   
12.
 
13.
REM Verzweigung, je nach Ergebnis  
14.
if %errorlevel% == 0 (   
15.
  REM Das Programm laeuft bereits und nichts wird gemacht  
16.
) else (   
17.
  REM Das Programm laeuft nicht und wird deshalb gestartet  
18.
  start "" /D"%Programm%" 
19.
) 
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
Bitte warten ..
Mitglied: miniversum
19.05.2009 um 15:58 Uhr
Ändere mal
set Programm=%2
in
set Programm="%~2"
Bitte warten ..
Mitglied: WiSch
19.05.2009 um 16:26 Uhr
Weder die Schreibweise
01.
set "programm=%~2"
noch
01.
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:
01.
einfachstart.cmd iexplore "C:\Programme\Internet Explorer\iexplore.exe"
und bekomme dann folgende Meldung zurück:
01.
Das aktuelle Verzeichnis ist ungültig.
Bitte warten ..
Mitglied: bastla
19.05.2009 um 16:30 Uhr
Hallo WiSch!

Sorry, leider nur oberflächlich gelesen ...

Versuch es mit folgender Zeile 18:
start "" "%Programm%"
Grüße
bastla
Bitte warten ..
Mitglied: WiSch
19.05.2009 um 16:43 Uhr
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:

01.
REM Prameter von der Kommandozeile holen 
02.
set "Suchname=%~1"  
03.
set "Programm=%~2" 
04.
 
05.
REM Fehlt ein Parameter dann Ende 
06.
if not defined Programm goto :ENDE  
07.
 
08.
REM Taskliste durchsuchen nach dem zu startenden Programm 
09.
tasklist |find /i "%Suchname%" >nul  
10.
 
11.
REM Verzweigung, je nach Ergebnis 
12.
if %errorlevel% == 0 (  
13.
  REM Das Programm laeuft bereits: Nichts machen 
14.
) else (  
15.
  REM Das Programm laeuft nicht: Programm starten  
16.
  start "" "%Programm%" 
17.
18.
 
19.
:ENDE 
20.
REM exit
Aufruf z.B. so:
01.
einfachstart iexplore "c:\programme\internet explorer\iexplore.exe"

//Edit:
@LotPings: Werde Deine Empfehlungen noch berücksichtigen, aber es läuft erst einmal so und das war (zeitlich) wichtig... Danke.
Bitte warten ..
Mitglied: LotPings
19.05.2009 um 16:45 Uhr
@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
01.
@echo off & setlocal   
02.
REM Prameter von der Kommandozeile holen  
03.
set "Suchname=%~1" 
04.
set "Programm=%~2" 
05.
 
06.
set ErrMsg=Usage: %~f0 Suchname Programm  Fehlt ein Parameter dann Ende  
07.
if not defined Programm Echo %ErrMsg% & Pause & Exit /B 1  
08.
 
09.
set ErrMsg=PSLIST ist ein für diese Batchdatei zwingend notwendiges Tool von SysInternals. 
10.
set ErrMsg=%ErrMsg% (http://technet.microsoft.com/de-de/sysinternals/bb896682.aspx)  
11.
 
12.
(set MyPath=.;%Path%)&IF defined PSList set "PSList=" 
13.
for /F "delims=" %%A in ("pslist.exe") do set "PSList=%%~$MyPath:A" 
14.
IF Not Defined PSList echo %ErrMsg% & Pause & Exit /B 2 
15.
 
16.
set ErrMsg=Programm %Programm läuft bereits, wird nicht nochmal gestartet. 
17.
"%PSList%" |find /i "%Suchname%" >nul &&Echo %ErrMsg% & Exit /B 3 
18.
 
19.
REM Das Programm laeuft nicht und wird deshalb gestartet  
20.
start "" /D"%Programm%"
Gruß
LotPings
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

Batch & Shell
Leerzeichen im Pfad (4)

Frage von Jallio zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch Winrar entpacken - Probleme bei Pfad (7)

Frage von Concurve zum Thema Batch & Shell ...

Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...