找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23435|回复: 8

[问题求助] 【已解决】求解vbs直接双击执行正常,使用任务计划执行则报错是什么原因

[复制链接]
发表于 2016-8-5 15:01:46 | 显示全部楼层 |阅读模式
本帖最后由 Tianorder 于 2016-8-16 10:19 编辑

双击运行时无错,而windows计划任务出错
开始时,我使用了
  1. do
  2. Loop while ReadFile.atendofstream <> true
复制代码
这个双击不会报错,而用windows计划任务执行时,会报错“输入超出了文件尾”。

我改成这个,计划任务就可以顺利执行了。
  1. Do While not ReadFile.AtEndOfStream
  2. Loop
复制代码
但是,之后,计时任务报错“类型不匹配:'UBound'”,但是双击时并不报错。
代码是
  1. for i = 0 to UBound(arrDest)
复制代码
我想,应该不是类型之类的问题,而是windosw计划任务解释器的问题。
我想问的是,windows计划任务解析VBS文件,用的是哪个解释器?相关的教程地址是?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2016-8-5 15:07:27 | 显示全部楼层
默认的解释器
因为解释器在system32目录中,所以任务计划启动后会当前路径会变成system32,
所以程序中需要用绝对路径。

评分

参与人数 1技术 +1 收起 理由
Tianorder + 1 虽然总觉得不是环境的问题..但事实胜于雄辩

查看全部评分

 楼主| 发表于 2016-8-13 09:59:10 | 显示全部楼层
回复 2# codegay


    但是...报错并不是路径的错呀
发表于 2016-8-14 00:02:49 | 显示全部楼层
回复 3# Tianorder


    贴全你的代码(替换掉你认为隐私的部分)。这几句代码看不出什么来。

评分

参与人数 1技术 +1 收起 理由
Tianorder + 1 啦啦啦啦啦啦

查看全部评分

 楼主| 发表于 2016-8-15 15:05:45 | 显示全部楼层
本帖最后由 Tianorder 于 2016-8-15 15:10 编辑

回复 4# yu2n
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set ReadFile = fso.OpenTextFile("config.ini", 1, True)
  3. boolErr = false
  4. i = 0
  5. '循环文件,放入数组
  6. Do   
  7.         cha = ReadFile.ReadLine
  8.         if  Left(cha, 1) <> ";" and Left(cha, 1) <> "[" and cha <> "" Then
  9.                 ReDim Preserve arrDest(i + 1)
  10.                 arrDest(i) = cha
  11.                 i = i + 1
  12.         End if
  13. Loop while ReadFile.atendofstream <> true
  14. x = ""
  15. count = UBound(arrDest)
  16. for i = 0 to count
  17.         x = x & vbCrLf & arrDest(i)
  18. Next
  19. msgbox x
  20. ReadFile.Close
  21. Set fso = nothing
复制代码
我觉得并不是代码的错,就如1L所言,双击时是不会有问题的,但win计划任务会报错“输入超出了文件尾”。
把 while ReadFile.atendofstream <> true 放到do后面时,不会出现这个错误,但是会出现Ubound的错误。
把 while ReadFile.atendofstream <> true 放到do后面、不使用Ubound时,计划任务可以正常执行。
发表于 2016-8-15 19:20:35 | 显示全部楼层
本帖最后由 yu2n 于 2016-8-15 19:24 编辑

回复 5# Tianorder

数组序号是从 0 开始,第 9 行建议应该这样写:
  1.                     ReDim Preserve arrDest(i)
复制代码
参照你的思路,看看以下代码是否可行:
  1. Option Explicit

  2. Dim fso, strText, strLine, arrDest(), i
  3. Set fso = CreateObject("Scripting.FileSystemObject")

  4. strText = fso.OpenTextFile("config.ini", 1, True).ReadAll

  5. i = 0
  6. For Each strLine In Split(strText, vbCrLf)
  7.         If Left(strLine, 1) <> ";" And Left(strLine, 1) <> "[" And strLine <> "" Then
  8.                 ReDim Preserve arrDest(i)
  9.                 arrDest(i) = strLine
  10.                 i = i + 1
  11.         End if
  12. Next

  13. Msgbox Join(arrDest, vbCrLf)
复制代码
 楼主| 发表于 2016-8-15 19:43:35 | 显示全部楼层
回复  Tianorder

数组序号是从 0 开始,第 9 行建议应该这样写:参照你的思路,看看以下代码是否可行:
yu2n 发表于 2016-8-15 19:20



  呃,实际上我已想出可行的方案。
现在就是想知道原因,为什么这样不行。
是因为Windows计划任务的解释器不一样吗?

你写的这段脚本也是“输出超出了文件尾”,当然,双击是没有错误的。
发表于 2016-8-15 20:11:55 | 显示全部楼层
回复 7# Tianorder


    计划任务的问题,2楼已经说明过了。如果你不会绝对路径,可以参考下面的“相对路径”:
  1. Option Explicit

  2. Dim wso, fso, strText, strLine, arrDest(), i
  3. Set wso = CreateObject("WScript.Shell")
  4. Set fso = CreateObject("Scripting.FileSystemObject")

  5. '指定当前路径
  6. wso.CurrentDirectory = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "") -1)

  7. strText = fso.OpenTextFile("config.ini", 1, True).ReadAll

  8. i = 0
  9. For Each strLine In Split(strText, vbCrLf)
  10.         If Left(strLine, 1) <> ";" And Left(strLine, 1) <> "[" And strLine <> "" Then
  11.                 ReDim Preserve arrDest(i)
  12.                 arrDest(i) = strLine
  13.                 i = i + 1
  14.         End if
  15. Next

  16. Msgbox Join(arrDest, vbCrLf)
复制代码

评分

参与人数 1技术 +1 收起 理由
Tianorder + 1 谢了。我再思考下

查看全部评分

 楼主| 发表于 2016-8-16 10:18:54 | 显示全部楼层
回复 8# yu2n


    计划任务可以运行本代码。

我再思考下。谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:47 , Processed in 0.024998 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表