Подтвердить что ты не робот

Двойные кавычки в аргументе VBScript

Как я сам читал и переживал сам VBScript удаляет все двойные кавычки и аргументы. Кто-нибудь знает об этом? Как передать двойные кавычки в script?

4b9b3361

Ответ 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/...