标题: [问题求助] 【已解决】求解vbs直接双击执行正常,使用任务计划执行则报错是什么原因 [打印本页]
作者: Tianorder 时间: 2016-8-5 15:01 标题: 【已解决】求解vbs直接双击执行正常,使用任务计划执行则报错是什么原因
本帖最后由 Tianorder 于 2016-8-16 10:19 编辑
双击运行时无错,而windows计划任务出错
开始时,我使用了- do
- Loop while ReadFile.atendofstream <> true
复制代码
这个双击不会报错,而用windows计划任务执行时,会报错“输入超出了文件尾”。
我改成这个,计划任务就可以顺利执行了。- Do While not ReadFile.AtEndOfStream
- Loop
复制代码
但是,之后,计时任务报错“类型不匹配:'UBound'”,但是双击时并不报错。
代码是- for i = 0 to UBound(arrDest)
复制代码
我想,应该不是类型之类的问题,而是windosw计划任务解释器的问题。
我想问的是,windows计划任务解析VBS文件,用的是哪个解释器?相关的教程地址是?
作者: codegay 时间: 2016-8-5 15:07
默认的解释器
因为解释器在system32目录中,所以任务计划启动后会当前路径会变成system32,
所以程序中需要用绝对路径。
作者: Tianorder 时间: 2016-8-13 09:59
回复 2# codegay
但是...报错并不是路径的错呀
作者: yu2n 时间: 2016-8-14 00:02
回复 3# Tianorder
贴全你的代码(替换掉你认为隐私的部分)。这几句代码看不出什么来。
作者: Tianorder 时间: 2016-8-15 15:05
本帖最后由 Tianorder 于 2016-8-15 15:10 编辑
回复 4# yu2n - Set fso = CreateObject("Scripting.FileSystemObject")
- Set ReadFile = fso.OpenTextFile("config.ini", 1, True)
- boolErr = false
- i = 0
- '循环文件,放入数组
- Do
- cha = ReadFile.ReadLine
- if Left(cha, 1) <> ";" and Left(cha, 1) <> "[" and cha <> "" Then
- ReDim Preserve arrDest(i + 1)
- arrDest(i) = cha
- i = i + 1
- End if
- Loop while ReadFile.atendofstream <> true
- x = ""
- count = UBound(arrDest)
- for i = 0 to count
- x = x & vbCrLf & arrDest(i)
- Next
- msgbox x
- ReadFile.Close
- Set fso = nothing
复制代码
我觉得并不是代码的错,就如1L所言,双击时是不会有问题的,但win计划任务会报错“输入超出了文件尾”。
把 while ReadFile.atendofstream <> true 放到do后面时,不会出现这个错误,但是会出现Ubound的错误。
把 while ReadFile.atendofstream <> true 放到do后面、不使用Ubound时,计划任务可以正常执行。
作者: yu2n 时间: 2016-8-15 19:20
本帖最后由 yu2n 于 2016-8-15 19:24 编辑
回复 5# Tianorder
数组序号是从 0 开始,第 9 行建议应该这样写:- ReDim Preserve arrDest(i)
复制代码
参照你的思路,看看以下代码是否可行:- Option Explicit
-
- Dim fso, strText, strLine, arrDest(), i
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- strText = fso.OpenTextFile("config.ini", 1, True).ReadAll
-
- i = 0
- For Each strLine In Split(strText, vbCrLf)
- If Left(strLine, 1) <> ";" And Left(strLine, 1) <> "[" And strLine <> "" Then
- ReDim Preserve arrDest(i)
- arrDest(i) = strLine
- i = i + 1
- End if
- Next
-
- Msgbox Join(arrDest, vbCrLf)
复制代码
作者: Tianorder 时间: 2016-8-15 19:43
回复 Tianorder
数组序号是从 0 开始,第 9 行建议应该这样写:参照你的思路,看看以下代码是否可行:
yu2n 发表于 2016-8-15 19:20
呃,实际上我已想出可行的方案。
现在就是想知道原因,为什么这样不行。
是因为Windows计划任务的解释器不一样吗?
你写的这段脚本也是“输出超出了文件尾”,当然,双击是没有错误的。
作者: yu2n 时间: 2016-8-15 20:11
回复 7# Tianorder
计划任务的问题,2楼已经说明过了。如果你不会绝对路径,可以参考下面的“相对路径”:- Option Explicit
-
- Dim wso, fso, strText, strLine, arrDest(), i
- Set wso = CreateObject("WScript.Shell")
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- '指定当前路径
- wso.CurrentDirectory = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\") -1)
-
- strText = fso.OpenTextFile("config.ini", 1, True).ReadAll
-
- i = 0
- For Each strLine In Split(strText, vbCrLf)
- If Left(strLine, 1) <> ";" And Left(strLine, 1) <> "[" And strLine <> "" Then
- ReDim Preserve arrDest(i)
- arrDest(i) = strLine
- i = i + 1
- End if
- Next
-
- Msgbox Join(arrDest, vbCrLf)
复制代码
作者: Tianorder 时间: 2016-8-16 10:18
回复 8# yu2n
计划任务可以运行本代码。
我再思考下。谢了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |