a000000 发表于 2021-8-17 07:27:40

多条件下的删除文件,求助

本帖最后由 a000000 于 2021-8-17 13:32 编辑

遭受恶意注册,一秒注册5~8个子账号,估计是封包注册,时间长了会导致系统运行非常缓慢,求助。
注册存档在d:\var文件夹下有三个文件夹:账号账号包含子账号
1、正常情况下,当” 账号”下产生一个文件的时候,比如:cs,2、“账号包含”文件夹下会同时产生一个相同名字的文件夹(cs文件夹)3、并且在cs文件夹中产生几个随机名字的文件比如:asd123   wer5sa4、然后会在”子账号”文件夹中产生单个或者多个相同名字的文件:asd123   wer5sa注:产生的所有文件无后缀遭到恶意注册后,恶意注册的账号不产生第四步(第四步已经辨识并删除清空)。
求:1、检测“账号包含”文件夹下的所有子文件夹内的文件如果在”子账号”文件夹中不存在相同名字的文件则删除该文件,清理完毕后删除所有空文件夹2、检测” 账号”文件夹下的文件是否在“账号包含”中有相同名字的文件夹,如果没有,删除该文件。
请大侠帮忙!多谢!总目录:账号下的文件,名字对应子账号的目录子账号的目录子账号文件夹内的样子:所有子账号的文件在一起






afan 发表于 2021-8-17 13:19:47

这个。。。改个标题比较好,内容基本与此无关~

a000000 发表于 2021-8-17 13:32:41

afan 发表于 2021-8-17 13:19
这个。。。改个标题比较好,内容基本与此无关~

好的版主,请帮个忙啊

a000000 发表于 2021-8-17 13:37:31

里面牵扯文件夹b子目录中的文件如果在c文件夹内不存在同名文件才删除,搞了半天搞不定,请各位大佬帮忙

afan 发表于 2021-8-17 13:49:35

a000000 发表于 2021-8-17 13:32
好的版主,请帮个忙啊

我先理解一下你的意思

a000000 发表于 2021-8-17 13:54:18

afan 发表于 2021-8-17 13:49
我先理解一下你的意思

多谢版主,诉求1跟2这俩可以分开来写成俩代码,我单个来运行也可以

afan 发表于 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
                $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
                        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
                If Not FileExists($sDirZHBH & '\' & $aDirZH[$ii]) Then
                        MsgBox(48, '账号包含 未包含 ' & $aDirZH[$ii], '删除: ' & $sDirZH & '\' & $aDirZH[$ii])
                        FileDelete($sDirZH & '\' & $aDirZH[$ii])
                EndIf
        Next
EndFunc   ;==>_TestCk2

a000000 发表于 2021-8-17 14:58:30

本帖最后由 a000000 于 2021-8-17 15:04 编辑

afan 发表于 2021-8-17 14:30

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

这里能不能是删除该文件,而不是删除该文件夹,当这个文件夹是空的时候才删除该文件夹。防止该账号中还有其他正常子账号,多谢版主

a000000 发表于 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
                $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
                        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
                If Not FileExists($sDirZHBH & '\' & $aDirZH[$ii]) Then
                        MsgBox(48, '账号包含 未包含 ' & $aDirZH[$ii], '删除: ' & $sDirZH & '\' & $aDirZH[$ii])
                        FileDelete($sDirZH & '\' & $aDirZH[$ii])
                EndIf
      Next
      EndFunc   ;==>_TestCk2
      
      再次多谢版主

afan 发表于 2021-8-17 15:42:59

如果只是删除文件,添加 & '\' & $aTmp[$jj] 就行了(DirRemove 改为 FileDelete)。

tubaba 发表于 2021-8-18 12:08:18

楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出

a000000 发表于 2021-8-18 12:13:01

tubaba 发表于 2021-8-18 12:08
楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出

不清楚从哪里下手:face (32):

afan 发表于 2021-8-18 13:50:37

修改标题。

afan 发表于 2021-8-21 19:50:18

以后不再提醒解决了不及时修改标题的问题,直接扣分。

a000000 发表于 2021-8-27 06:21:37

afan 发表于 2021-8-21 19:50
以后不再提醒解决了不及时修改标题的问题,直接扣分。
:face (8):我看过了,没有已经解决的类了,上次记得问过,说不用管,没那个类了现在是直接改标题还是有什么其他方法?
页: [1] 2
查看完整版本: 多条件下的删除文件,求助