CMD verschachtelten Anführungszeichen im argument
Ich habe Probleme mit dem übergeben von Argumenten an eine batch-Funktion mit geschachtelten Anführungszeichen.
Hier ist ein Beispiel einer batch-Datei:
@SET path_with_space="c:\test\filenamewith space.txt"
@CALL :FUNCTION blaat1, "blaat2 %path_with_space%"
@GOTO :EOF
:FUNCTION
@echo off
echo arg 1: %~1
echo arg 2: %~2
echo arg 3: %~3
GOTO :EOF
Ausgabe:
arg 1: blaat1
arg 2: blaat2 "c:\test\filenamewith
arg 3: space.txt""
Was sollte ich tun, um arg 2: blaat2 "c:\test\filenamewith space.txt"
?
Beachten Sie, dass kann ich nicht einstellen, die Funktion oder ändern Sie die %path_with_space%
. Ich kann nur kontrollieren, was an die Funktion übergeben wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie dbenham sagte, es scheint unmöglich zu entkommen, ein Raum in einem parameter ohne Anführungszeichen ein.
Aber es könnte möglich sein, wenn Sie wissen, wie die Empfänger - Funktion erhält den Parameter.
Dann könnte man tranfer der parameter über ein entflohener verzögerte variable, die variable erweitert werden, die nicht in den Ruf, es wird erweitert, nur in der Funktion.
Und es ist notwendig, dass die Parameter, die zugewiesen werden in der Funktion zur Variablen, aber dies könnte der Fall sein in einem guten und lesbaren code.
Ausgabe:
EDIT: Soltution mit batch-Injektion
Dies funktioniert auch, wenn die verzögerte Erweiterung sollte immer deaktiviert.
Aber dann müssen Sie jetzt, wie die Parameter erweitert werden, die in der Funktion.
%
, aber vergaß!
. Es macht jetzt Sinn. Danke!Fand ich das aber alles, was ich tun konnte, war, verschieben Sie das Problem um in verschiedene Bereiche.
Arbeiten mit Zitaten
arg 1: blaat1 arg 2: blaat2 c:\test\filenamewith space.txt arg 3:
Netter Versuch, aber die Zitate sind Weg 🙁Ich glaube, es ist nicht möglich.
Ist es nicht möglich zu entkommen, ein Raum, so dass es ist nicht so auszulegen, als parameter-Trennzeichen. Der einzige Weg, um ein Leerzeichen in einem parameter ist, müssen Sie ihn in Anführungszeichen. Sie benötigen etwas Platz, um zitiert werden, und einige nicht, so ist es unmöglich.
%
, aber ohne Erfolg.@jeb +1
@davor
warum verwenden Sie nicht einfach double-double quotes
Ausgabe:
Ich schlage vor, Sie entfernen Sie Anführungszeichen vor der übergabe der Argumente an FUNKTION (Hinweis:
%path_with_space:"=%"
vs%path_with_space%"
im ursprünglichen Beispiel), dann können Sie setzen Sie Sie wieder ein, ersetzen Sie Ihren Weg mit zitiert verion (%%_arg_2:%path_with_space:"=%=%path_with_space%%%
):Ausgabe:
Wenn auch andere Argumente enthalten Pfade, die von Anführungszeichen eingeschlossen sind, können Sie dem gleichen Muster Folgen für alle von Ihnen