Übergabe von Parameter an eine Batch Funktion inklusive obere Anführungszeichen
Hallo zusammen,
ich habe mir einen Batchrumpf gebastelt, mit dem ich ein einfaches Logging der darin gemachten Dinge erzielen möchte:
Damit würden auch die Ausgaben des DEL Aufrufs mit einem Zeitstempel in der Logfile landen. Nun habe ich jedoch das Problem, dass ich nicht weiß wie ich " maskieren kann.
Wenn ich die Zeile in Form von
schreibe, werden die äußeren Anführungszeichen bei der Übergabe an die Funktion geschluckt. So etwas
funktionier jedoch auch nicht. Und auch mit ^ maskieren scheint nicht zu klappen. Mein Beispiel funktioniert auch nur, weil den String eben in 9 Argumente aufteilt und die " zwischendrin
als Text gesehen werden. Das ist aber so nicht schön und auch nicht wirklich nachvollziehbar. Ich bin echt am Verzweifeln. Habe schon einiges versucht, aber irgendwie will es auf keine Art klappen.
Auf meine Art sehen die einzelnen Übergabeparameter wie folgt aus:
Wie kann ich die " so übergeben, dass sie erhalten bleiben und nicht von der Funktion verschluckt werden?
Danke
ich habe mir einen Batchrumpf gebastelt, mit dem ich ein einfaches Logging der darin gemachten Dinge erzielen möchte:
SET filename=%~n0
SET logfile=C:\%filename%.log
CALL:printLogLine "Starting installation of %filename%.bat"
CALL:printCmdOutput "if exist "\Documents and Settings\All Users\Desktop\Quicktime Player.lnk" del "\Documents and Settings\All Users\Desktop\Quicktime Player.lnk"
goto:eof
REM Echo the date/time stamp including a logline to a file
:printLogLine
ECHO %date%^|%TIME:~0,8%^|%filename%.bat, %~1 >> %logfile%
goto:eof
REM Echo the date/time stamp and execute the given command printing both into a logfile
:printCmdOutput
ECHO %date%^|%TIME:~0,8%^|%filename%.bat: >> %logfile%
%~1 %~2 %~3 %~4 %~5 %~6 %~7 %~8 %~9 >> %logfile% 2>&1
goto:eof
Damit würden auch die Ausgaben des DEL Aufrufs mit einem Zeitstempel in der Logfile landen. Nun habe ich jedoch das Problem, dass ich nicht weiß wie ich " maskieren kann.
Wenn ich die Zeile in Form von
CALL:printCmdOutput "if exist \Documents and Settings\All Users\Desktop\Quicktime Player.lnk del \Documents and Settings\All Users\Desktop\Quicktime Player.lnk
schreibe, werden die äußeren Anführungszeichen bei der Übergabe an die Funktion geschluckt. So etwas
CALL:printCmdOutput "if exist """\Documents and Settings\All Users\Desktop\Quicktime Player.lnk""" del """\Documents and Settings\All Users\Desktop\Quicktime Player.lnk"
funktionier jedoch auch nicht. Und auch mit ^ maskieren scheint nicht zu klappen. Mein Beispiel funktioniert auch nur, weil den String eben in 9 Argumente aufteilt und die " zwischendrin
als Text gesehen werden. Das ist aber so nicht schön und auch nicht wirklich nachvollziehbar. Ich bin echt am Verzweifeln. Habe schon einiges versucht, aber irgendwie will es auf keine Art klappen.
Auf meine Art sehen die einzelnen Übergabeparameter wie folgt aus:
C:\>test.bat
if exist "\Documents
and
Settings\All
Users\Desktop\Quicktime
Player.lnk" del "\Documents
and
Settings\All
Users\Desktop\Quicktime
Player.lnk"
Wie kann ich die " so übergeben, dass sie erhalten bleiben und nicht von der Funktion verschluckt werden?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183004
Url: https://administrator.de/forum/uebergabe-von-parameter-an-eine-batch-funktion-inklusive-obere-anfuehrungszeichen-183004.html
Ausgedruckt am: 18.04.2025 um 23:04 Uhr
6 Kommentare
Neuester Kommentar
Aloha,
du hast schon den Wink mit der Tilde gelesen, oder?
Wenn man
Als nächstes stellt sich mir die Frage, wenn da wirklich nur zwei Zeilen Loggesülze kommen, warum man unbedingt einen
An sich eine interessante Problematik ...
aber wie so oft: Sinn der Aktion? Muss man das jetzt so lösen wollen oder vergeudet man nur Zeit?
greetz André
P.S.: oder wie? Nachwievor sinnlos aber als Übergabe machbar ...
du hast schon den Wink mit der Tilde gelesen, oder?
Wenn man
%~2
statt %2
nimmt, muss man sich nicht wundern, dass "C:\blub abc\test.txt"
zu C:\blub abc\test.txt
wird.Als nächstes stellt sich mir die Frage, wenn da wirklich nur zwei Zeilen Loggesülze kommen, warum man unbedingt einen
call
setzen will und diese Problematik damit hervorruft?An sich eine interessante Problematik ...
aber wie so oft: Sinn der Aktion? Muss man das jetzt so lösen wollen oder vergeudet man nur Zeit?
greetz André
P.S.:
set "Befehl="Del "C:\blub abc\test.txt"""
set "Befehl="if exist "\Documents and Settings\All Users\Desktop\Quicktime Player.lnk" del "\Documents and Settings\All Users\Desktop\Quicktime Player.lnk"""
%Befehl%>%temp%\sinnfrei.log 2>&1
Zitat von @HuberDe:
nein ehrlich gesagt habe ich die Tilde bislang ignoriert
Was sagt mir denn diese Tilde? Warum wirft die Anführungszeichen weg?
nein ehrlich gesagt habe ich die Tilde bislang ignoriert
%~1 - Expandiert %1 und entfernt umschließende
Anführungszeichen (").
Weil das so gewollt ist ...
call /?
anyone?greetz André