小智 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)
编辑:误解了这个问题,所以这里有新的答案:
我认为你无法以任何方式做到这一点。但是,解决方法可能是使用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"
| 归档时间: |
|
| 查看次数: |
31572 次 |
| 最近记录: |