0

WinXPで実行されているプログラムにコマンドライン引数としてコードの断片を渡そうとしています。コードスニピット全体を1つの引数として渡すことができませんでした。SPACE文字とQUOTE文字で分割されます(予想どおり)。すべてを引用し、QUOTE、SLASH、またはCARATでQUOTE文字をエスケープすることも失敗します...

Const TheCode = "main(""Literal String Argument"", 123, true)"
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.Run """c:\Folder with space\ArgTest.vbs"" """ & TheCode & """"

次のvbsスクリプトを実行して引数をエコーバックし、受信したものをテストします。

ArgTest.vbs:

Dim ArgumentIndex
For ArgumentIndex = 0 to Wscript.Arguments.Count - 1
    Call Msgbox(Wscript.Arguments(ArgumentIndex), vbOKOnly+vbInformation, "Argument " & ArgumentIndex)
Next

編集:QUOTESを規定するのはVBSエコースクリプトであることがわかりました。QUOTEを使用してエスケープします。

4

1 に答える 1

0

Windowsには、引用符をエスケープするための標準はありません。引用符をどのようにエスケープするかは、アプリの開発者の裁量に完全に依存します。それを行う方法を説明するアプリのドキュメントがない場合は、自分でそれを発見する必要があります(アプリがエスケープされた引用符をサポートしていると仮定します)

バックスラッシュを試したようです。

Const TheCode = "main(\""Literal String Argument\"", 123, true)"

あなたはまた、あなたがカレットを試したと言います:

Const TheCode = "main(^""Literal String Argument^"", 123, true)"

引用符を2倍にしてみましたか?

Const TheCode = "main(""""Literal String Argument"""", 123, true)"
于 2012-07-12T13:45:08.183 に答える