找回密码
 加入
搜索
查看: 4677|回复: 13

[AU3基础] 复制文件的一个问题(已解决)

 火.. [复制链接]
发表于 2010-5-7 05:41:52 | 显示全部楼层 |阅读模式
本帖最后由 xiaojinglf 于 2010-5-11 20:55 编辑

我在使用dircopy复制文件当中,如果出现某一个文件复制失败(比如某个文件被杀软误报拦截后),整个dircopy复制过程就结束了。有什么办法可以忽略此问题而继续复制后续文件的参数呢?例如xpcopy的/c参数。

我查过帮助文件,么有找到方法。请大家赐教。

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-5-7 05:57:10 | 显示全部楼层
不怕麻烦用FileCopy循环完成。
 楼主| 发表于 2010-5-8 08:37:32 | 显示全部楼层
不怕麻烦用FileCopy循环完成。
sky808 发表于 2010-5-7 05:57


怎么循环法啊。
我的意思是:对于被阻止的文件不再重试了。跳过继续。
发表于 2010-5-8 18:02:46 | 显示全部楼层
思路:
1.将需要复制的文件文件名写入数组
2.通过循环语句执行FileCopy,若失败则返回值为0 ,记录此元素,继续执行FileCopy
3.如果文件完全复制,提示完毕;反之,提示未执行复制的元素
 楼主| 发表于 2010-5-8 20:52:35 | 显示全部楼层
思路:
1.将需要复制的文件文件名写入数组
2.通过循环语句执行FileCopy,若失败则返回值为0 ,记录此元素 ...
lynfr8 发表于 2010-5-8 18:02



    由于复制的文件太多了。而且包含子文件夹。且文件名无共同点。写入数组就困难了。
发表于 2010-5-8 20:55:56 | 显示全部楼层
#include <File.au3>

_FileRecur(@WindowsDir)
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 2)
        If Not IsArray($folder) Then Return 0
        For $o = 1 To $folder[0]
                MsgBox(0, '', $_Path & "" & $folder[$o])
                _FileRecur($_Path & "" & $folder[$o])
        Next
EndFunc  
获取某文件夹下的所有文件及子文件夹
发表于 2010-5-8 20:56:28 | 显示全部楼层
根据楼上的提示,LZ可以自己写个 _DirCopy()
 楼主| 发表于 2010-5-8 22:11:03 | 显示全部楼层
好。我试一下。谢谢
 楼主| 发表于 2010-5-9 09:31:42 | 显示全部楼层
本帖最后由 xiaojinglf 于 2010-5-9 14:08 编辑

回复 6# lynfr8
我试了一下,filecopy的确可以跳过错误文件继续。dircopy遇到错误就会退出。
#include <File.au3>
_FileRecur(@ProgramFilesDir & "\soft")
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 0)
        If Not IsArray($folder) Then Return 0
        For $o = 1 To $folder[0]
                _FileRecur($_Path & "" & $folder[$o])
                FileCopy ($_Path, "d:\soft",9)
                Next
EndFunc
Exit
$folder[$o]可能是文件也可能是文件夹。所以不知道怎么恢复目录结构。复制到目标位置后都是文件,没有目录结构了。
我刚学这个。不知道该怎么写了。最后我还是调用了xcopy来完成的。
但是我还是希望高手能帮我写出这个例子。我也可以从中学习思维方式。
感谢以上二位的指导。
发表于 2010-5-11 10:54:50 | 显示全部楼层
其实xcopy带参数简单啊呵呵
发表于 2010-5-11 12:01:48 | 显示全部楼层
本帖最后由 C.L 于 2010-5-11 12:03 编辑

回复 9# xiaojinglf

要目录结构代码稍加处理就行了:
#include <File.au3>
$sfolder = @ProgramFilesDir & "\soft"
$pathlen = StringLen($sfolder)
_FileRecur($sfolder)
MsgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 0)
        If Not IsArray($folder) Then Return 0
        For $o = 1 To $folder[0]
                _FileRecur($_Path & "" & $folder[$o])
                FileCopy ($_Path, "d:\soft"&StringTrimLeft($_Path,$pathlen)&"",9)
                Next
EndFunc

评分

参与人数 3威望 +2 金钱 +10 贡献 +5 收起 理由
lynfr8 + 5 感谢你对论坛的支持,希望以后继续发扬这种 ...
xiaojinglf + 10 谢谢解答。操作成功,我会好好学习一下的。
afan + 2

查看全部评分

 楼主| 发表于 2010-5-11 20:58:11 | 显示全部楼层
本帖最后由 xiaojinglf 于 2010-5-12 07:58 编辑
回复  xiaojinglf

要目录结构代码稍加处理就行了:
C.L 发表于 2010-5-11 12:01

感谢解答。运行很成功,我会好好研究一下的。
多谢以上各位帮助。
发表于 2010-5-12 07:27:05 | 显示全部楼层
11 楼完美。。
发表于 2010-6-13 10:19:46 | 显示全部楼层
过来学习的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-6 12:30 , Processed in 0.077681 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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