Как я сам читал и переживал сам VBScript удаляет все двойные кавычки и аргументы. Кто-нибудь знает об этом? Как передать двойные кавычки в script?
Двойные кавычки в аргументе VBScript
Ответ 1
Если для этого параметра требуются кавычки, вы можете использовать именованный параметр для его идентификации, а затем заключить его в двойные кавычки
dim arg
if WScript.Arguments.Named.Exists("a") then
arg = WScript.Arguments.Named("a")
arg = chr(34) & arg & chr(34)
end if
и используется таким образом:
cscript test.vbs /a:"a parameter"
но это не помогает, если вы просто хотите сохранить кавычки, если они поставлены. Одиночные кавычки принимаются, поэтому вы можете использовать одиночные кавычки (или другой символ/строку) и сделать Replace(arg, "'", chr(34))
для преобразования в двойные кавычки.
Ответ 2
Этот script получит командную строку как есть, с двойными кавычками и все с переменной 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)
Так работает, что с помощью
cscript scriptname.vbs "option" ""other option"" third option
приведет к:
"option" ""other option"" third option
Ответ 3
Изменить: Непонятно вопрос, так новый ответ здесь:
Я не думаю, что вы можете это сделать. Тем не менее, работа может заключаться в использовании свойства CommandLine
класса Win32_Process, который должен получить вам полную командную строку, о которой я думаю.
Например, попробуйте этот script:
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
С параметрами as: "some long commandline enclosed in double quotes here"
Ответ 4
Я не уверен, что это работает, но, передавая параметр, я думаю, вы можете сделать что-то вроде -
chr(34) + <your argument string> + chr(34)
Хр (34) означает двойные кавычки.
Ответ 5
К сожалению, я не знаю никаких методов эвакуации для передачи двойных кавычек, потому что это разделитель аргументов. Все, что я могу предложить, это изменить ваш script или добавить туда цитаты.
Ответ 6
Вместо того, чтобы проверять, чтобы командная строка включала WScript.ScriptName, вы можете получить текущий PID, как в fooobar.com/info/106076/...