VBScript - 相对路径不起作用

时间:2014-04-25 16:35:51

标签: windows vbscript

我正在尝试使用相对路径从VBscript引用名为wsusscn2.cab的cab文件。出于某种原因,它不起作用。 wsusscn2.cab与脚本位于同一目录中。根据我读过的文档,这应该有效,但不是:

Set UpdateSession = CreateObject("Microsoft.Update.Session")
Set UpdateServiceManager = CreateObject("Microsoft.Update.ServiceManager")
Set UpdateService = UpdateServiceManager.AddScanPackageService("Offline Sync Service", "..\wsusscn2.cab")
Set UpdateSearcher = UpdateSession.CreateUpdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

UpdateSearcher.ServerSelection = 3 ' ssOthers

UpdateSearcher.ServiceID = UpdateService.ServiceID

Set SearchResult = UpdateSearcher.Search("IsInstalled=0")

Set Updates = SearchResult.Updates

If searchResult.Updates.Count = 0 Then
    WScript.Echo "There are no applicable updates."
    WScript.Quit
End If

WScript.Echo "List of applicable items on the machine when using wssuscan.cab:" & vbCRLF

For I = 0 to searchResult.Updates.Count-1
    Set update = searchResult.Updates.Item(I)
    WScript.Echo I + 1 & "> " & update.Title
Next

WScript.Quit

生成此错误:The system cannot find the path specified.

3 个答案:

答案 0 :(得分:0)

试试这个:

  Set UpdateService = UpdateServiceManager.AddScanPackageService("Offline Sync Service", "../wsusscn2.cab")

但请确保此驾驶室位于您呼叫它的页面上方一级的文件夹中,这就是您所拥有的。

或者如果同一个文件夹中的cab是这样的:

  Set UpdateService = UpdateServiceManager.AddScanPackageService("Offline Sync Service", "wsusscn2.cab")

答案 1 :(得分:0)

.AddScanPackageService()方法似乎不允许其方法中的相对路径。要修复这个,同时仍然保持灵活的代码。您可以通过Wscript.ScriptFullName创建脚本位置的路径,并将其附加到wsussc2.cab的前面。这将保持脚本的路径。所以只要脚本和.cab文件在一起就可以工作。

 Set UpdateService = UpdateServiceManager.AddScanPackageService("Offline Sync Service", Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) & "wsusscn2.cab")

答案 2 :(得分:0)

当我遇到这个问题时,我想知道这可能是服务权限与文件位置的关系,但不是,只是需要绝对文件路径。

我使用FileSystemObject的GetAbsolutePathName函数来确定完整路径,这使您可以将随机的相对路径(例如“ .. \ reports \ something \ blah.cab”或“ local.cab”)放入。 )

Set fso = CreateObject("Scripting.FileSystemObject")
CabFileArg = Wscript.Arguments(0)  ' (cscript updatecheck.vbs wsusscn2.cab)
CabFileAbs = fso.GetAbsolutePathname(CabFileArg)

然后是通常的东西,只使用CabFileAbs。

Set UpdateSession = CreateObject("Microsoft.Update.Session")
Set UpdateServiceManager = CreateObject("Microsoft.Update.ServiceManager")
Set UpdateService = UpdateServiceManager.AddScanPackageService("Offline CAB", CabFileAbs , 1)
Set UpdateSearcher = UpdateSession.CreateUpdateSearcher()

…等等