找回密码
 加入
搜索
查看: 4548|回复: 16

[AU3基础] 多条件下的删除文件,求助

[复制链接]
发表于 2021-8-17 07:27:40 | 显示全部楼层 |阅读模式
本帖最后由 a000000 于 2021-8-17 13:32 编辑

遭受恶意注册,一秒注册5~8个子账号,估计是封包注册,时间长了会导致系统运行非常缓慢,求助。

注册存档在d:\var文件夹下有三个文件夹:
账号
账号包含
子账号

1、正常情况下,当账号下产生一个文件的时候,比如:cs
2账号包含文件夹下会同时产生一个相同名字的文件夹(cs文件夹)
3、并且在cs文件夹中产生几个随机名字的文件比如:asd123     wer5sa
4、然后会在子账号文件夹中产生单个或者多个相同名字的文件:asd123     wer5sa
注:产生的所有文件无后缀
遭到恶意注册后,恶意注册的账号不产生第四步(第四步已经辨识并删除清空)。

求:
1、检测账号包含文件夹下的所有子文件夹内的文件如果在子账号文件夹中不存在相同名字的文件则删除该文件,清理完毕后删除所有空文件夹
2、检测账号文件夹下的文件是否在“账号包含”中有相同名字的文件夹,如果没有,删除该文件。

请大侠帮忙!多谢!
总目录:
账号下的文件,名字对应子账号的目录
子账号的目录
子账号文件夹内的样子:
所有子账号的文件在一起







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 -20 收起 理由
afan -20

查看全部评分

发表于 2021-8-17 13:19:47 | 显示全部楼层
这个。。。改个标题比较好,内容基本与此无关~
 楼主| 发表于 2021-8-17 13:32:41 | 显示全部楼层
afan 发表于 2021-8-17 13:19
这个。。。改个标题比较好,内容基本与此无关~

好的版主,请帮个忙啊
 楼主| 发表于 2021-8-17 13:37:31 | 显示全部楼层
里面牵扯文件夹b子目录中的文件如果在c文件夹内不存在同名文件才删除,搞了半天搞不定,请各位大佬帮忙
发表于 2021-8-17 13:49:35 | 显示全部楼层
a000000 发表于 2021-8-17 13:32
好的版主,请帮个忙啊

我先理解一下你的意思
 楼主| 发表于 2021-8-17 13:54:18 | 显示全部楼层
afan 发表于 2021-8-17 13:49
我先理解一下你的意思

多谢版主,诉求1跟2  这俩可以分开来写成俩代码,我单个来运行也可以
发表于 2021-8-17 14:30:30 | 显示全部楼层
#include <File.au3>

Global $sDirZH = '账号'
Global $sDirZHBH = '账号包含'
Global $sDirZZH = '子账号'
_TestCk1()
_TestCk2()

Func _TestCk1() ;1、检测“账号包含”文件夹下的所有子文件夹,子文件夹内的文件如果在”子账号”文件夹中不存在相同名字的文件则删除该文件,清理完毕后删除所有空文件夹
        Local $aDirZHBH = _FileListToArray($sDirZHBH, '*', 2)
        If @error Then Return
        For $ii = 1 To $aDirZHBH[0]
                $aTmp = _FileListToArray($sDirZHBH & '\' & $aDirZHBH[$ii], '*', 1)
                If @error Then
                        MsgBox(48, '空文件夹', '删除: ' & $sDirZHBH & '\' & $aDirZHBH[$ii])
                        DirRemove($sDirZHBH & '\' & $aDirZHBH[$ii])
                        ContinueLoop
                EndIf
                For $jj = 1 To $aTmp[0]
                        If Not FileExists($sDirZZH & '\' & $aTmp[$jj]) Then
                                MsgBox(48, '子账号未包含 ' & $aTmp[$jj], '删除: ' & $sDirZHBH & '\' & $aDirZHBH[$ii])
                                DirRemove($sDirZHBH & '\' & $aDirZHBH[$ii], 1)
                        EndIf
                Next
        Next
EndFunc   ;==>_TestCk1

Func _TestCk2() ;2、检测” 账号”文件夹下的文件是否在“账号包含”中有相同名字的文件夹,如果没有,删除该文件。
        Local $aDirZH = _FileListToArray($sDirZH, '*', 1)
        If @error Then Return
        For $ii = 1 To $aDirZH[0]
                If Not FileExists($sDirZHBH & '\' & $aDirZH[$ii]) Then
                        MsgBox(48, '账号包含 未包含 ' & $aDirZH[$ii], '删除: ' & $sDirZH & '\' & $aDirZH[$ii])
                        FileDelete($sDirZH & '\' & $aDirZH[$ii])
                EndIf
        Next
EndFunc   ;==>_TestCk2
 楼主| 发表于 2021-8-17 14:58:30 | 显示全部楼层
本帖最后由 a000000 于 2021-8-17 15:04 编辑

测试完毕,基本正常,只有一点,可能我刚才表达不准确造成的。
1、检测“账号包含”文件夹下的所有子文件夹内的文件如果在”子账号”文件夹中不存在相同名字的文件则删除该文件,清理完毕后如果产生了空文件夹,那么删除所有空文件夹

这里能不能是删除该文件,而不是删除该文件夹,当这个文件夹是空的时候才删除该文件夹。防止该账号中还有其他正常子账号,多谢版主
 楼主| 发表于 2021-8-17 15:20:34 | 显示全部楼层
本帖最后由 a000000 于 2021-8-17 15:27 编辑

最后测试改为:测试基本正常,只是鼠标会显示忙碌好久,不知道是不是我改的不对
请版主看下对不对


#include <File.au3>

Global $sDirZH = '账号'
Global $sDirZHBH = '账号包含'
Global $sDirZZH = '子账号'
_TestCk1()
_TestCk2()

Func _TestCk1() ;1、检测“账号包含”文件夹下的所有子文件夹,子文件夹内的文件如果在”子账号”文件夹中不存在相同名字的文件则删除该文件,清理完毕后删除所有空文件夹
        Local $aDirZHBH = _FileListToArray($sDirZHBH, '*', 2)
        If @error Then Return
        For $ii = 1 To $aDirZHBH[0]
                $aTmp = _FileListToArray($sDirZHBH & '\' & $aDirZHBH[$ii], '*', 1)
                If @error Then
                        MsgBox(48, '空文件夹', '删除: ' & $sDirZHBH & '\' & $aDirZHBH[$ii])
                        DirRemove($sDirZHBH & '\' & $aDirZHBH[$ii])
                        ContinueLoop
                EndIf
                For $jj = 1 To $aTmp[0]
                        If Not FileExists($sDirZZH & '\' & $aTmp[$jj]) Then
                                MsgBox(48, '子账号未包含 ' & $aTmp[$jj], '删除: ' & $sDirZHBH & '\' & $aDirZHBH[$ii] & '\'  & $aTmp[$jj])
                                FileDelete($sDirZHBH & '\' & $aDirZHBH[$ii] & '\' & $aTmp[$jj])
                        EndIf
                Next
        Next
EndFunc   ;==>_TestCk1

Func _TestCk2() ;2、检测” 账号”文件夹下的文件是否在“账号包含”中有相同名字的文件夹,如果没有,删除该文件。
        Local $aDirZH = _FileListToArray($sDirZH, '*', 1)
        If @error Then Return
        For $ii = 1 To $aDirZH[0]
                If Not FileExists($sDirZHBH & '\' & $aDirZH[$ii]) Then
                        MsgBox(48, '账号包含 未包含 ' & $aDirZH[$ii], '删除: ' & $sDirZH & '\' & $aDirZH[$ii])
                        FileDelete($sDirZH & '\' & $aDirZH[$ii])
                EndIf
        Next
        EndFunc   ;==>_TestCk2
        
        再次多谢版主
发表于 2021-8-17 15:42:59 | 显示全部楼层
如果只是删除文件,添加 & '\' & $aTmp[$jj] 就行了(DirRemove 改为 FileDelete)。
发表于 2021-8-18 12:08:18 | 显示全部楼层
楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出
 楼主| 发表于 2021-8-18 12:13:01 | 显示全部楼层
tubaba 发表于 2021-8-18 12:08
楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出

不清楚从哪里下手
发表于 2021-8-21 19:50:18 | 显示全部楼层
以后不再提醒解决了不及时修改标题的问题,直接扣分。
 楼主| 发表于 2021-8-27 06:21:37 | 显示全部楼层
afan 发表于 2021-8-21 19:50
以后不再提醒解决了不及时修改标题的问题,直接扣分。

我看过了,没有已经解决的类了,上次记得问过,说不用管,没那个类了现在是直接改标题还是有什么其他方法?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 22:03 , Processed in 0.082641 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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