我正在尝试创建一个.vbs,它将检查是否存在DVD驱动器(如果objdrive.drivetype = 4)而忽略其他驱动器(如硬盘驱动器)(否则如果cdrive = 1则为-no statement- ect。)。 然而,这条线让我感到悲伤:“对于colDrives中的每个objDrive”。当它存在时会导致语法错误,但是当它被删除时会导致错误,说“需要对象:objdrive”。该脚本使用hta / vbs混合,它提供用户取消对媒体的搜索,这是通过使用一个函数实现的,因此将它放在sub中并调用它将是无用的。这是我的代码,请帮忙。
Set shell=CreateObject("wscript.shell")
Set objShell = Wscript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
For Each objDrive in colDrives
if objdrive.drivetype= 4 then
select case 1
case 1
if objdrive.isready then
'continue statement here
else
select case 2
case 2
with HTABox("#F2F2F2", 115, 300, 700, 400)
.document.title = "Waiting..."
.msg.innerHTML = "Waiting for playable media...<b>"
end with
function HTABox(sBgColor, h, w, l, t)
Dim IE, HTA
randomize : nRnd = Int(1000000 * rnd)
sCmd = "mshta.exe ""javascript:{new " _
& "ActiveXObject(""InternetExplorer.Application"")" _
& ".PutProperty('" & nRnd & "',window);" _
& "window.resizeTo(" & w & "," & h & ");" _
& "window.moveTo(" & l & "," & t & ")}"""
with CreateObject("WScript.Shell")
.Run sCmd, 1, False
do until .AppActivate("javascript:{new ") : WSH.sleep 10 : loop
end with ' WSHShell
For Each IE In CreateObject("Shell.Application").windows
If IsObject(IE.GetProperty(nRnd)) Then
set HTABox = IE.GetProperty(nRnd)
IE.Quit
HTABox.document.title = "Waiting"
HTABox.document.write _
"<HTA:Application contextMenu=no border=thin " _
& "minimizebutton=no maximizebutton=no sysmenu=no />" _
& "<body scroll=no style='background-color:" _
& sBgColor & ";font:normal 10pt Arial;" _
& "border-Style:normal;border-Width:0px'" _
& "onbeforeunload='vbscript:if (done.value or cancel.value) then " _
& "window.event.cancelBubble=false:" _
& "window.event.returnValue=false:" _
& "cancel.value=false: done.value=false:end if'>" _
& "<input type=hidden id=done value=false>" _
& "<input type=hidden id=cancel value=false>" _
& "<center><span id=msg> </span><br>" _
& " <center><input type=button id=btn1 value=Cancel
' "_
& "onclick=self.close><center></body>"
exit function
End If
Next
MsgBox "HTA window not found."
wsh.quit
End Function
end select
end select
else if objdrive.drivetype = 1 then
else if objdrive.drivetype = 2 then
else if objdrive.drivetype = 3 then
else if objdrive.drivetype = 5 then
end if
答案 0 :(得分:1)
语法错误很可能是由于缺少关闭循环的Next
关键字引起的。我认为条件if objdrive.isready then
也缺少结束End If
(在两个End Select
之间)。添加缺少的关键字,错误就会消失。
然而,你正在完成整个过程。为什么要从VBScript动态创建HTA?只需编写HTA并在其中嵌入您需要的任何VBScript代码。有关简介,请参阅this tutorial。另外,我强烈建议强烈建议避免使用嵌套函数定义。它们会在某些时候引起您的维护问题,甚至在VBScript中通常都不允许这样做。你的Select
陈述应该做什么?构造
Select Case 1
Case 1
'instruction
End Select
完全没有意义,因为首先没有选择。它与直接运行指令完全相同。另一件要避免的是条件句中的空行为。它们只会使您的代码更难以阅读和维护而不会产生任何好处。
答案 1 :(得分:0)
可能你的问题可能是由你的For语句中的“objDrive”中的大写字母D引起的,然后你在循环中用小写字母“d”objdrive.isready引用该名称。您可能希望在顶部声明“Option Explicit”以查找所有未声明的变量。
您可以测试下面的代码并查看它是否正常运行。
Set objFSO = CreateObject("Scripting.FileSystemObject")
For Each objDrive in objFSO.Drives
If objDrive.DriveType = 4 Then
If objDrive.IsReady Then
MsgBox "The appropriate media is inserted and ready for access"
Else
MsgBox "The Drive Is Not Ready"
End If
End If
Next
另外,我不确定您提供的代码段是否为完整代码,但似乎有几个缺少的End语句。如果是这样,这些也可能会给您带来麻烦。