Я действительно разочарован фрагментом ниже:
Dim objFSO, varSrc, varDest, varExt
Set objFSO = CreateObject("Scripting.FileSystemObject")
varSrc = WScript.Arguments(0)
varDest = WScript.Arguments(1)
varExt = WScript.Arguments(2)
If objFSO.FolderExists(varSrc) Then
WScript.Echo varSrc
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name=""c:\\\\kk ""'")
Do
Set objLatestEvent = colMonitoredEvents.NextEvent
WScript.Echo objLatestEvent.TargetInstance.PartComponent
Loop
Else
WScript.Echo "Bazinga"
End If
Я попытался заменить c: \\ kk на varSrc, однако WSH кажется невозможным распознать его в запросе WMI - не говоря уже о том, чтов пределах одной цитаты!
Я пробовал chr (34), и это не сработало.Пожалуйста, помогите, если это возможно.Очень признателен!
ОБНОВЛЕНИЕ:
Большое спасибо за ответ и извинения за неясности.
varSrc
предполагается ""1015 *».и запрос WMI не смог его распознать.Позвольте мне объяснить на примере:
Запрос должен быть разобран так:
SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' AND TargetInstance.GroupComponent= 'Win32_Directory.Name= ""c:\\\\KK""'
Я протестировал запрос выше, и он работает!Однако мне нужно заменить c:\\\\kk
аргументом, взятым из пользовательского ввода, который в данном случае равен varSrc
.Проблема, с которой я столкнулся, заключается либо в том, что синтаксис правильный, но WMI Query воспринимал бы varSrc
буквально как 'Directory.Name
';Или другой способ - синтаксическая ошибка или не разбираемый запрос.
Если запрос:
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name=""varSrc""'")
Сценарий будет работать без ошибок, однако он не выполняет свою работу по отслеживанию вновь созданных файлов.,Потому что он анализирует «Directory.Name» как литерал «varSrc» вместо пользовательского аргумента.
Если запрос:
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " _
& "Targetinstance ISA 'CIM_DirectoryContainsFile' AND " _
& "TargetInstance.GroupComponent= " _
& "'Win32_Directory.Name="""""&varSrc&"""""'")
Будет выдано сообщение об ошибке:
vmove.vbs(15, 2) SWbemServicesEx: Invalid query