atalics
Goto Top

Anführungszeichen in Batch Datei ausgeben

Guten Abend Leute,
ich wollte eine Verknüpfung per CMD erstellen (Code von bastla, funktioniert ohne meine Veränderungen einwandfrei ^^), in dieser Verknüpfung soll dann als Pfad folgendes stehen: " "C:\Users\Dennis\Desktop\PeZBot\iw3mp.exe" +set fs_game "mods\PeZBOT" "
Allerdings wird das dann nur so: " "C:\Users\Dennis\Desktop\PeZBot\iw3mp.exe +set fs_game mods\PeZBOT" "
Das ist der Code:

@echo on & setlocal

::Speicherort der Verknüpfung (unterhalb von Startmenue\Programme)
::set "zielpfad=%userprofile%\Startm~1\Programme\XXXXX" 
::Falls das Symbol auf den Desktop soll:
set "zielpfad=%userprofile%\Desktop\Test Spiel"  

::Name der Verknüpfung (ohne ".lnk") 
set "progtitel=Bots"  
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet) 
set "progdir=%~dp0"  
set "progexe=iw3mp.exe"  
::Kommentar
set "beschreibung=Test"  

::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad"): 
if not exist "%zielpfad%" md "%zielpfad%"  

::temporäres VBScript erzeugen ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath="%progdir%\%progexe% +set fs_game mods/PeZBOT">>%temp%\MakeShortCut.vbs  
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs  
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs  
echo objShortcut.Save>>%temp%\MakeShortCut.vbs

::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs

::... und wieder löschen.
del %temp%\MakeShortCut.vbs

pause

Ich nehme an dass das Problem in diesem Bereich liegt, weil in dem Pfad der Verknüpfung mehrere "" vertreten sein müssen

echo objShortcut.TargetPath="%progdir%\%progexe% +set fs_game mods/PeZBOT">>%temp%\MakeShortCut.vbs  

Ich weiß jetzt nicht genau wie ich diese "" dort einbringen muss, denn wenn ich die einfach rein tu dann gibt es einen Fehler beim erstellen.
Ich hoffe ihr versteht was ich meine.

Danke mfG Atalics

Content-Key: 232831

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

Printed on: April 16, 2024 at 17:04 o'clock

Member: rubberman
Solution rubberman Mar 17, 2014 updated at 21:29:03 (UTC)
Goto Top
Hallo Atalics, willkommen im Forum.

Bei bastlas Code erledigt die Arbeit ein temporäres VBScript. Dort gilt: Strings müssen in Anführungszeichen eingeschlossen werden und Anführungszeichen in Strings müssen verdoppelt werden.
echo objShortcut.TargetPath="""%progdir%\%progexe%"" +set fs_game ""mods/PeZBOT""">>%temp%\MakeShortCut.vbs  

Grüße
rubberman
Member: Atalics
Atalics Mar 17, 2014 at 20:49:20 (UTC)
Goto Top
Danke für die schnelle Antwort.

Es funktioniert in soweit wenn in dem Pfad kein Leerzeichen auftaucht, also bei z.B. "C:\Test" funktioniert es einwandfrei, sobald es aber z.B. "C:\Test 1" heißt geht es nicht mehr und es kommt die "Laufzeitfehler in Microsoft VBScript: Ungültiger Prozeduraufruf oder ungültiges Argument" Fehlermeldung.

Wie kann man das beheben?

Danke mfG Atalics
Member: rubberman
Solution rubberman Mar 17, 2014 updated at 21:29:06 (UTC)
Goto Top
Hallo Atalics,

sorry, für Programmargumente gibt es natürlich die Arguments Eigenschaft (neue Zeile 23).
@echo on & setlocal

::Speicherort der Verknüpfung (unterhalb von Startmenue\Programme)
::set "zielpfad=%userprofile%\Startm~1\Programme\XXXXX" 
::Falls das Symbol auf den Desktop soll:
set "zielpfad=%userprofile%\Desktop\Test Spiel"  

::Name der Verknüpfung (ohne ".lnk") 
set "progtitel=Bots"  
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet) 
set "progdir=%~dp0"  
set "progexe=iw3mp.exe"  
::Kommentar
set "beschreibung=Test"  

::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad"): 
if not exist "%zielpfad%" md "%zielpfad%"  

::temporäres VBScript erzeugen ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath="""%progdir%\%progexe%""">>%temp%\MakeShortCut.vbs  
echo objShortcut.Arguments="+set ""fs_game mods/PeZBOT""">>%temp%\MakeShortCut.vbs  
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs  
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs  
echo objShortcut.Save>>%temp%\MakeShortCut.vbs

::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs

::... und wieder löschen.
del %temp%\MakeShortCut.vbs

pause

Grüße
rubberman
Member: Jannis92
Jannis92 Mar 17, 2014 at 21:08:00 (UTC)
Goto Top
Probiere mal die einfachen Anführungszeichen ' ' oder einen backslash vor den doppelten anführungszeichen.
"befehl \"Pfad 1\" "
Das funktioniert zumindest bei c++ :p
Member: Atalics
Atalics Mar 17, 2014 at 21:14:47 (UTC)
Goto Top
Ich verneige mich vor dem Meister :D
Danke hat alles wunderbar geklappt face-smile
Ich werde es als gelöst markieren face-smile

PS: Die Anführungszeichen müssten so: fs_game ""mods/PeZBOT"" gesetzt sein anstatt so: ""fs_game mods/PeZBOT"". Das tut aber nichts zur Sache das Prinzip hab ich verstanden face-smile

Danke mfG Atalics
Member: Dani
Dani Mar 17, 2014 at 21:22:13 (UTC)
Goto Top
Moin,
bitte markiere die Kommentare die zur Problemlösung geführt haben, ebenfalls noch.


Grüße,
Dani