Ich verwende CScript, um eine VBScript-Datei auszuführen, und ich muss eine Befehlszeile an das Skript übergeben, wo der Parameter Leerzeichen und Anführungszeichen enthält. Der gesamte Befehl muss als ein Parameter an das Skript übergeben werden. Zum Beispiel:Wie wird ein Befehl mit Leerzeichen und Anführungszeichen als einzelner Parameter an CScript übergeben?
C:\> CScript myscript.vbs //Nologo "cmd.exe /c "dir && del /q *.txt""
Hinweis der spezifische Befehlszeile oben ist nur ein Beispiel, aber es tut Touch auf dem, was ich versuche, (d passiert eine Befehlszeile, die cmd.exe beinhaltet Laufen) zu tun. Ich versuche jedoch, den allgemeinen Fall zu lösen.
Das Problem ist, dass CScript scheint verwirrt zu werden, versuchen zu bestimmen, wo Angebote öffnen und schließen. Zumindest manchmal.
Das folgende Skript kann helfen, zu erklären. Er gibt nur die in Argumente übergeben, wie es sie sieht:
Dim count
For count = 0 To WScript.Arguments.Count-1
WScript.Echo CStr(count) & " = " & WScript.Arguments.Item(count)
Next
Oft funktioniert es wie erwartet:
C:\> cscript myscript.vbs //Nologo "1 2 3"
0 = 1 2 3
Aber wenn es Anführungszeichen innerhalb der angegebenen Parameter sind, die Dinge zu ändern:
C:\> cscript myscript.vbs //Nologo "1 "2 3""
0 = 1 2
1 = 3
Ich verstehe, es gibt eine eingeführte Ambiguität darüber, ob jedes Zitat einen Parameter im obigen Beispiel öffnet oder schließt, also versuchte ich als Nächstes, die internen Anführungszeichen zu umgehen, also den Comman d Prozessor wird sie als Literalzeichenfolgen behandeln:
C:\> cscript myscript.vbs //Nologo "1 ^"2 3^""
0 = 1 ^2
1 = 3
Hmmm, sieht aus wie das funktioniert nur, wenn die Schale hat Ihren Globbing und so für Sie. Ich bezweifle, dass Cscript ^
als Escape-Zeichen wie cmd.exe funktioniert.
Mit einfachen Anführungszeichen innerhalb der doppelten Anführungszeichen Befehl (zB „cmd.exe/c‚dir & & cd \‘“), als einziger Parameter analysiert, aber nicht, weil für den Fall der Berufung auf cmd.exe arbeiten Mit dem Parameter/c reichen einfache Anführungszeichen nicht aus. Zum Beispiel:
C:\> cmd /c 'dir && cd \'
''dir' is not recognized as an internal or external command,
operable program or batch file.
nehme an, ich bin nur über alle Argumente im Skript laufen könnte und kommen sie zurück in eine lange Reihe, aber ich werde die inneren Anführungszeichen und Kontext verlieren, die sie vorsehen, dass zu tun. Oder vielleicht verwende ich einfache Anführungszeichen innerhalb des doppelt zitierten Param und ordne diese auf doppelte Anführungszeichen innerhalb des Skripts zurück. Aber was, wenn die Absicht war einfache Anführungszeichen für irgendeinen zukünftigen Fall, den ich nicht betrachte? Da ich versuche, den allgemeinen Fall zu lösen, kann ich diese Entscheidung nicht treffen.
Irgendwelche Ideen?
Werfen Sie einen Blick auf diese SO-Frage: [Anführungszeichen im VBScript-Argument] (http://stackoverflow.com/questions/4192376/double-quotes-in-vbscript-argument). Vielleicht einige hilfreiche Antworten dort. –
Danke. Ich werde mal schauen. Das Abrufen der Befehlszeile von WMI funktioniert möglicherweise einfach. –