3

バッチスクリプトがあります:

test.bat

echo first arg is %1
pause

次のような管理者権限を持つvbscriptから呼び出したいこと:

test.vbs

Set UAC = CreateObject("Shell.Application")
UAC.ShellExecute "test.bat", "argument", "", "runas", 1

これは問題なく機能しますが、スペースを含むパス引数を単一の引数として渡すことができません。基本的に、引数をスペースで囲む必要がありますが、何をしようとしても機能しません。バッチを呼び出しているように見えますが、cmdウィンドウが点滅して消えてしまうため、何が問題になっているのかわかりません。私はもう試した:

UAC.ShellExecute "test.bat", """has spaces""", "", "runas", 1

UAC.ShellExecute "test.bat", Chr(34) & "has spaces" & Chr(34), "", "runas", 1

UAC.ShellExecute "test.bat", '"has spaces"', , "runas", 1

UAC.ShellExecute "cmd", "/c test.bat " & chr(34) & "has spaces" & chr(34), "", "runas", 1

しかし、運はありません。私が間違っていることについて何か提案はありますか?

4

1 に答える 1

4

これを機能させる方法は次のとおりです。

UAC.ShellExecute "cmd", "/c """"c:\test.bat"" ""has spaces""""", "", "runas", 1

runasを使用して管理者ユーザー権限を呼び出すときに注意すべき重要な点は、作業ディレクトリがc:\ windows\system32に変更されることです。したがって、バッチファイルを見つけることができるように、バッチファイルへのフルパスを指定する必要があります。

直接実行するのではなく、batファイルを引数として「cmd」に渡す場合にのみこれが機能する理由はまだわかりません。

すべてのクレジットはAlexKによるものので、これが役に立った場合は、彼のコメントに賛成してください。

この場合、cmdに対する引数のセット全体を引用する必要があり、各引数も引用する必要があります。また、引用符を2倍にする必要があります。少し気が狂ったように見えますが、引数とbatファイルのパスにスペースがあると失敗するため、これが最善の解決策です。

于 2012-11-16T12:17:25.900 に答える