找回密码
 加入
搜索
查看: 3803|回复: 8

WIN98系统 子脚本使用了非数组变量的问题!

  [复制链接]
发表于 2009-12-9 11:16:11 | 显示全部楼层 |阅读模式
本帖最后由 huianhuian 于 2009-12-14 18:23 编辑


我的脚本在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[10]
        $search = FileFindFirstFile("D:\数据备份\20??-??-??")
        While 1
                $bakfiled = FileFindNextFile($search)
                If @error Then ExitLoop
                $FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
                If $FileList[0] < 6 Then ExitLoop
                DirRemove("d:\数据备份\" & $bakfile, 1)
        WEnd
        FileClose($search)
EndFunc



我发现问题就出在        $FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
                If $FileList[0] < 6 Then ExitLoop
这行代码上面  不知道应该加什么条件的判断
发表于 2009-12-9 11:51:03 | 显示全部楼层
本帖最后由 顽固不化 于 2009-12-9 11:52 编辑

不说windows98里能否运行,感觉编程上存在问题的。
FileFindFirstFile没用上?作为删除的依据?
$FileList被_FileListToArray赋值成数组后,前面为什么要定义维数?
删除早期的备份文件如果用日期的先后来判断不是更好?
既然一次性能得到完整数组,干么放进循环里?
................
 楼主| 发表于 2009-12-9 11:57:09 | 显示全部楼层
本帖最后由 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[0] < 6 Then ExitLoop
发表于 2009-12-9 12:23:08 | 显示全部楼层
本帖最后由 顽固不化 于 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[0] < =6 Then
                Return
        Else
                _ArraySort($FileList,0,1)
                For $i=1 To $FileList[0]-6
                   DirRemove("d:\数据备份" & $FileList[$i])
                Next
        EndIf
EndFunc
发表于 2009-12-9 12:23:57 | 显示全部楼层
If $FileList[0] < 6前面多加一个对@error的判断吧,因为如果有错,就不存在$Filelist这个数组了
 楼主| 发表于 2009-12-9 12:41:49 | 显示全部楼层
本帖最后由 huianhuian 于 2009-12-9 12:49 编辑

感谢顽固不化的指教

我又测试了下$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)
在win98下无法获取中文目录下的文件 改成英文的目录d:\bak下就可以 是不是_FileListToArray在98下不支持中文目录?
$FileList = _FileListToArray("d:\数据备份", "20??-??-??", 2)执行错误 返回$FileList 不是数组变量  到了 if $FileList[0] <6就报错的
应该是这样原因吗?
 楼主| 发表于 2009-12-9 12:52:09 | 显示全部楼层
回复 5# wisly

加上@error的判断也只是不在提示出错了  下面的删除目录的代码也没法工作了
发表于 2009-12-9 12:57:48 | 显示全部楼层
没装98,没法试验,估计File.au3与win98有兼容性问题
 楼主| 发表于 2009-12-9 16:14:31 | 显示全部楼层
本帖最后由 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")

上面的英文路径就正常  下面的中文路径就出错

再次感谢顽固不化的帮助
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-17 10:32 , Processed in 0.082000 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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