VBScript参数中的双引号

Dan*_*ani 17 vbscript

当我为自己阅读和体验时,VBScript会删除所有双引号和参数.有没有人知道这方面的方法?如何将双引号传递给脚本?

小智 11

如果该参数需要引号,则可以使用命名参数来标识它,然后用双引号将值括起来

dim arg
if WScript.Arguments.Named.Exists("a") then
    arg = WScript.Arguments.Named("a")
    arg = chr(34) & arg & chr(34)
end if
Run Code Online (Sandbox Code Playgroud)

因此使用:

cscript test.vbs /a:"a parameter"
Run Code Online (Sandbox Code Playgroud)

但如果您只想提供引号,这无济于事.虽然接受单引号,但您也可以使用单引号(或其他字符/字符串)并执行Replace(arg, "'", chr(34))转换为双引号.


小智 7

这个脚本将按原样获取命令行,使用双引号和一个名为strLine的变量,并显示它:

Set objSWbemServices = GetObject("WinMgmts:Root\Cimv2") 
Set colProcess = objSWbemServices.ExecQuery("Select * From Win32_Process") 
For Each objProcess In colProcess 
    If InStr (objProcess.CommandLine, WScript.ScriptName) <> 0 Then 
        strLine = Mid(objProcess.CommandLine, InStr(objProcess.CommandLine , WScript.ScriptName) + Len(WScript.ScriptName) + 1)
    End If 
Next
WScript.Echo(strLine)
Run Code Online (Sandbox Code Playgroud)

因此运行:

cscript scriptname.vbs "option" ""other option"" third option
Run Code Online (Sandbox Code Playgroud)

会导致:

"option" ""other option"" third option
Run Code Online (Sandbox Code Playgroud)


Han*_*son 1

编辑:误解了这个问题,所以这里有新的答案:

我认为你无法以任何方式做到这一点。但是,解决方法可能是使用Win32_ProcessCommandLine类的属性,我认为这应该为您提供完整的命令行。

例如尝试这个脚本:

Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set processes = wmi.ExecQuery("SELECT * FROM Win32_Process")
For Each proc in processes
    If InStr(proc.CommandLine, "double quotes") > 0 Then
        wscript.echo proc.CommandLine
    End IF
Next
Run Code Online (Sandbox Code Playgroud)

参数为:"some long commandline enclosed in double quotes here"