WIN98系统 子脚本使用了非数组变量的问题!
本帖最后由 huianhuian 于 2009-12-14 18:23 编辑http://i32.tinypic.com/jsn9mq.jpg
我的脚本在xp系统下面没问题 但一到win98下运行就出现上面的错误提示。
我使用的3.2.9.14版本的ANSI 模式进行编译的 支持98系统的
同样的程序在xp下正常 不知是什么原因
我搜了下论坛,也有同样的问题 好像是缺少判断的条件 我也试着修改 因为水平有限还是无法解决
这是我的代码 请大侠们帮看看
#include <File.au3>
#Include <Array.au3>
Run("A6.exe")
Sleep(10000)
ProcessWaitClose("A6.exe");运行应用软件,软件退出后清除多余备份文件夹 只保留5个 文件夹格式为日期格式YY-MM-DD形式,如2009-12-09
_Deldata();因为d:\数据备份下每天都生成一个日期形式的文件夹 实在太多了 所以要清除掉较早日期的
;多余数据清除
Func _Deldata()
;处理d盘备份
Local $search, $bakfile, $FileList
$search = FileFindFirstFile("D:\数据备份\20??-??-??")
While 1
$bakfiled = FileFindNextFile($search)
If @error Then ExitLoop
$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
If $FileList < 6 Then ExitLoop
DirRemove("d:\数据备份\" & $bakfile, 1)
WEnd
FileClose($search)
EndFunc
我发现问题就出在 $FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
If $FileList < 6 Then ExitLoop
这行代码上面不知道应该加什么条件的判断 本帖最后由 顽固不化 于 2009-12-9 11:52 编辑
不说windows98里能否运行,感觉编程上存在问题的。
FileFindFirstFile没用上?作为删除的依据?
$FileList被_FileListToArray赋值成数组后,前面为什么要定义维数?
删除早期的备份文件如果用日期的先后来判断不是更好?
既然一次性能得到完整数组,干么放进循环里?
................ 本帖最后由 huianhuian 于 2009-12-9 12:18 编辑
回复 2# 顽固不化
d:\数据备份下面还有其他不是日期格式的文件夹 所以用20??-??-??匹配
系统自动生成的是2009-01-01这样的个是 里面还有2009-1-1这样的手工建的文件夹
我只删除系统生成的文件夹
win98机器较老 时钟经常不准该应用软件有硬件卡设备支持上面有时钟芯片 生成的日期不以计算机日期为准
我把 _FileListToArray放到循环里是想光把2009-12-09这样的文件夹搜索出来删除掉 每循环一次就再次判断这样的文件夹数量 当为5个时退出循环
$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
If $FileList < 6 Then ExitLoop 本帖最后由 顽固不化 于 2009-12-9 12:31 编辑
瞎写一个,参考,未考虑日期手工(机器)生成。#include <File.au3>
#Include <Array.au3>
Dim $FileList
Run("A6.exe")
Sleep(10000)
ProcessWaitClose("A6.exe");运行应用软件,软件退出后清除多余备份文件夹 只保留5个 文件夹格式为日期格式YY-MM-DD形式,如2009-12-09
_Deldata();因为d:\数据备份下每天都生成一个日期形式的文件夹 实在太多了 所以要清除掉较早日期的
;多余数据清除
Func _Deldata()
$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
if @Error then Return
If $FileList < =6 Then
Return
Else
_ArraySort($FileList,0,1)
For $i=1 To $FileList-6
DirRemove("d:\数据备份\" & $FileList[$i])
Next
EndIf
EndFunc
If $FileList < 6前面多加一个对@error的判断吧,因为如果有错,就不存在$Filelist这个数组了 本帖最后由 huianhuian 于 2009-12-9 12:49 编辑
感谢顽固不化的指教
我又测试了下$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
在win98下无法获取中文目录下的文件 改成英文的目录d:\bak下就可以 是不是_FileListToArray在98下不支持中文目录?
$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)执行错误 返回$FileList 不是数组变量到了 if $FileList <6就报错的
应该是这样原因吗? 回复 5# wisly
加上@error的判断也只是不在提示出错了下面的删除目录的代码也没法工作了 没装98,没法试验,估计File.au3与win98有兼容性问题 本帖最后由 huianhuian 于 2009-12-9 16:18 编辑
经反复测试 确实是_FileListToArray在win98系统下对中文路径有兼容性问题。
以Autoit帮助中的范例为测试对象:
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray("D:\bak")
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
_ArrayDisplay($FileList,"$FileList")
#Include <File.au3>
#Include <Array.au3>
$FileList=_FileListToArray("D:\数据备份")
If @Error=1 Then
MsgBox (0,"","No Files\Folders Found.")
Exit
EndIf
_ArrayDisplay($FileList,"$FileList")
上面的英文路径就正常下面的中文路径就出错
再次感谢顽固不化的帮助
页:
[1]