[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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文件,用的是哪个解释器?相关的教程地址是?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
您好

默认的解释器
因为解释器在system32目录中,所以任务计划启动后会当前路径会变成system32,
所以程序中需要用绝对路径。
1

评分人数

    • Tianorder: 虽然总觉得不是环境的问题..但事实胜于雄辩技术 + 1
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 2# codegay


    但是...报错并不是路径的错呀
您好

TOP

回复 3# Tianorder


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

评分人数

『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 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时,计划任务可以正常执行。
您好

TOP

本帖最后由 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)
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复  Tianorder

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



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

你写的这段脚本也是“输出超出了文件尾”,当然,双击是没有错误的。
您好

TOP

回复 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

评分人数

『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 8# yu2n


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

我再思考下。谢了。
您好

TOP

返回列表