Цитата в VBscript

Я использую vbscript для запроса задания «at», которое выполняет определенную команду, и я считаю, что неправильно цитирую. Я подтвердил, что скрипт работает должным образом, когда я запрашиваю что-то, что не содержит пробелов или кавычек; однако, когда я запрашиваю что-то, что содержит пробелы и кавычки, я не получаю желаемых результатов. Точное значение, которое я хочу найти: cmd /c "C:\Test Folder\Folder1\Blah.cmd"

Вот код, который я использую:

strComputer = "."
strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\"_
    & strComputer & "\root\cimv2")
Set colRandJob = objWMIService.ExecQuery _
            ("Select * from Win32_ScheduledJob WHERE Command='cmd /c ""C:\Test Folder\Folder1\Blah.cmd""' ")

For Each objJob in colRandJob
            WScript.Echo "Found  AT Job with ID " + CStr(objJob.JobID)
Next

Я пробовал несколько разных вещей и не могу найти правильный путь. Может ли кто-нибудь помочь мне и сообщить мне правильный способ сделать это?

Обновить

Я смог решить проблему, выполнив следующие действия (я включаю только соответствующие строки). Я не проверял это без двойной косой черты в пути, но я считаю, что это необходимо вместе с новой цитатой, которую я использовал:

'Assign the string I'm looking for to a variable
set targetCmd = "cmd /c "C:\\Test Folder\\Folder1\\Blah.cmd""

Set colRandJob = objWMIService.ExecQuery _
    ("Select * from Win32_ScheduledJob WHERE Command='" & targetCmd & "' ")

person Johnathon    schedule 21.08.2011    source источник
comment
Вы что-нибудь получите, если удалите предложение WHERE (т.е. выберите все задания)? Я пробовал, и у меня не было выхода   -  person    schedule 22.08.2011
comment
Синтаксис, который вы использовали, абсолютно правильный. Кажется, для вашего запроса нет равенства.   -  person Kul-Tigin    schedule 22.08.2011


Ответы (2)


Обратная косая черта (\) — это escape-символ в WMI. Таким образом, запросы WMI должны использовать двойную обратную косую черту \\ вместо каждой одиночной обратной косой черты:

Set colRandJob = objWMIService.ExecQuery _
    ("Select * from Win32_ScheduledJob WHERE Command='cmd /c ""C:\\Test Folder\\Folder1\\Blah.cmd""' ")
person Helen    schedule 22.08.2011
comment
Я считаю, что это было частью проблемы. Я обновил свой пост тем, что в конечном итоге сработало для меня. - person Johnathon; 23.08.2011

Используйте """", чтобы создать строку, содержащую только ", а также используйте &, чтобы сначала объединить вашу строку.

mystring = "cmd /c " & """"C:\Test Folder\Folder1\Blah.cmd"""  

(не испытано )

person ghostdog74    schedule 22.08.2011
comment
разве это не должно быть """C:\Test Folder\Folder1\Blah.cmd"""? т.е. у вас слишком много двойных кавычек - person ; 22.08.2011
comment
Я просто обращался к проблеме некомпиляции. согласен, у ОП правильные кавычки в вопросе - person ; 22.08.2011