中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [HTA]为何window.setInterval用法不成功(VBS脚本延迟)
作者:
标题: [HTA]为何window.setInterval用法不成功(VBS脚本延迟) 上一主题 | 下一主题
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『楼 主』:  [HTA]为何window.setInterval用法不成功(VBS脚本延迟)

目的:
扫描当前目录及子目录下文件,并显示在HTA的SPAN区域,如果文件后缀是bak则删除这个文件,并显示在删除区域,因为要实时显示,所以要用暂停保证SPAN区域显示了,才进行下步代码.但HTA里没有wscript.sleep 1000 这样的代码,所以使用setInterval
但却不成功

PS:不想使用借用VBS或者CMD实现暂停,因为占内存,并且鼠标一直显示忙碌状态,个人觉得不专业.

以下是代码:
<html><title>HTA template</title><head>
<HTA:APPLICATION
APPLICATIONNAME="HTA Template"
SCROLL="yes"
SINGLEINSTANCE="yes"
WINDOWSTATE="normal"
>
</head>
<style>
BODY
{
   background-color: buttonface;
      Font: arial,sans-serif
   margin-top: 0px;`
   margin-left: 0px;
   margin-right: 0px;
   margin-bottom: 0px;
}
.button
{
   width: 91px;
   height: 25px;
   font-family: arial,sans-serif;
   font-size: 8pt;
}
td
{
   font-family: arial,sans-serif;
   font-size: 10pt;
}
#scroll
{
height:100%;
overflow:auto;
}
SELECT.FixedWidth
{
width: 17em;  /* maybe use px for pixels or pt for points here */
}
</style>
<script language="VBScript">
Public fso
Dim iTimerID
Set fso=CreateObject("Scripting.FileSystemObject")

Sub ButtonClick
   curPath=Mid(fso.GetParentFolderName(window.location),9)
   seek curpath
End Sub

Sub seek(Path)
  'Set fso=CreateObject("Scripting.FileSystemObject")
  Set curF=fso.GetFolder(path)
  If curF.SubFolders.count>0 Then
     For Each subf In curF.SubFolders
         seek subf
     Next
  End If
  If curF.Files.count>0 Then
    For Each file In curF.Files
       scaning.innertext=file
       iTimerID = window.setInterval("DF(file)",1000)
    Next
  End If
End Sub

Sub DF(files)
  window.clearInterval(iTimerID)
  If lcase(fso.GetExtensionName(files))="bak" Then
     MsgBox files
     done.innertext=done.innertext&vbCr&files
     fso.DeleteFile files
  End If

End Sub

Sub window_onload
  window.resizeTo 700,400
End Sub
</script>
<body >
<p>   点击"查杀"按钮进行查杀:
  <input class="button" type=BUTTON value="查杀" name="btnTestButton"  onClick="ButtonClick">
</p>
<p>  当前正在查杀:<br>
    <font color="#00FF00"><span id="scaning" class="FixedWidth" >请点击“查杀”按钮 </span>
  </p>
</font></p>
<p>  被删除的文件:<br> </p>  <font color="#00FF00"> <span id="done" class="FixedWidth" > </span></font>
</p>
<p>&nbsp;</p>
<P align="right">
</body></html>


2007-11-7 21:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

setTimeout、setInterval只适用于延时执行指定的命令,并不能在自身循环内延时



2007-11-7 23:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 3 楼』:  


<html><title>HTA template</title><head>
<HTA:APPLICATION
APPLICATIONNAME="HTA Template"
SCROLL="yes"
SINGLEINSTANCE="yes"
WINDOWSTATE="normal"
>
</head>
<style>
BODY
{
   background-color: buttonface;
      Font: arial,sans-serif
   margin-top: 0px;`
   margin-left: 0px;
   margin-right: 0px;
   margin-bottom: 0px;
}
.button
{
   width: 91px;
   height: 25px;
   font-family: arial,sans-serif;
   font-size: 8pt;
}
td
{
   font-family: arial,sans-serif;
   font-size: 10pt;
}
#scroll
{
height:100%;
overflow:scroll;
}
SELECT.FixedWidth
{
width: 17em;  /* maybe use px for pixels or pt for points here */
}
</style>
<script language="VBScript">
Public fso
Dim iTimerID
Set fso=CreateObject("Scripting.FileSystemObject")

Sub ButtonClick
   curPath=Replace(Mid(fso.GetParentFolderName(window.location),9),"%20"," ")
   if document.getElementsByName("btnTestButton").item(0).value="查杀" then
       iTimerID = window.setInterval("seek('" + curPath + "')",2000)
       document.getElementsByName("btnTestButton").item(0).value="停止"
   else
      window.clearInterval(iTimerID)
      document.getElementsByName("btnTestButton").item(0).value="查杀"      
   end if
End Sub

Sub seek(Path)
  'Set fso=CreateObject("Scripting.FileSystemObject")
  scaning.innertext=""
  Set curF=fso.GetFolder(path)
  If curF.SubFolders.count>0 Then
     For Each subf In curF.SubFolders
         seek subf
     Next
  End If
  If curF.Files.count>0 Then
    For Each file In curF.Files
       scaning.innertext=scaning.innertext&vbCr&file
       DF file
    Next
  End If
End Sub

Sub DF(files)
  'window.clearInterval(iTimerID)
  If lcase(fso.GetExtensionName(files))="bak" Then
     MsgBox files
     done.innertext=done.innertext&vbCr&files
     fso.DeleteFile files
  End If

End Sub

Sub window_onload
  window.resizeTo 700,400
End Sub
</script>
<body >
<p>   点击"查杀"按钮进行查杀:
  <input class="button" type=BUTTON value="查杀" name="btnTestButton"  onClick="ButtonClick">
</p>
<p>  当前正在查杀:<br>
    <font color="#000000"><span id="scaning" class="FixedWidth" >请点击“查杀”按钮 </span>
  </p>
</font></p>
<p>  被删除的文件:<br> </p>  <font color="#FF0000"> <span id="done" class="FixedWidth" > </span></font>
</p>
<p>&nbsp;</p>
<P align="right">
</body></html>
有个问题,路径的中的空格问题,会被转成有效的统一资源标识符,全部替换吧

又怕某些文件夹名中有“%20”字符,不转的话,又会找不到路径

vbs中,又没js中的decodeURI方法。

[ Last edited by abcd on 2007-11-8 at 10:16 AM ]

2007-11-8 09:26
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
kich
中级用户





积分 397
发帖 168
注册 2006-10-8
状态 离线
『第 4 楼』:  

首先感谢楼上的,测试了下,感觉不是很好~~!

因为不能实时显示当前正在查杀的文件,呈现扫描状态,一直都在更新,都在动.
希望能有这样的脚本.
PS:因为是递归程序,所以用SETINTERVAL有点困难,期待.

2007-11-8 11:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: