多条件下的删除文件,求助
本帖最后由 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
这个。。。改个标题比较好,内容基本与此无关~
好的版主,请帮个忙啊 里面牵扯文件夹b子目录中的文件如果在c文件夹内不存在同名文件才删除,搞了半天搞不定,请各位大佬帮忙 a000000 发表于 2021-8-17 13:32
好的版主,请帮个忙啊
我先理解一下你的意思 afan 发表于 2021-8-17 13:49
我先理解一下你的意思
多谢版主,诉求1跟2这俩可以分开来写成俩代码,我单个来运行也可以 #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 15:04 编辑
afan 发表于 2021-8-17 14:30
测试完毕,基本正常,只有一点,可能我刚才表达不准确造成的。
1、检测“账号包含”文件夹下的所有子文件夹内的文件如果在”子账号”文件夹中不存在相同名字的文件则删除该文件,清理完毕后如果产生了空文件夹,那么删除所有空文件夹
这里能不能是删除该文件,而不是删除该文件夹,当这个文件夹是空的时候才删除该文件夹。防止该账号中还有其他正常子账号,多谢版主 本帖最后由 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
再次多谢版主
如果只是删除文件,添加 & '\' & $aTmp[$jj] 就行了(DirRemove 改为 FileDelete)。 楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出 tubaba 发表于 2021-8-18 12:08
楼主都注册十多年了,还这个水平.哎,说什么好呢,逻辑都有,几句基本代码也写不出
不清楚从哪里下手:face (32): 修改标题。 以后不再提醒解决了不及时修改标题的问题,直接扣分。 afan 发表于 2021-8-21 19:50
以后不再提醒解决了不及时修改标题的问题,直接扣分。
:face (8):我看过了,没有已经解决的类了,上次记得问过,说不用管,没那个类了现在是直接改标题还是有什么其他方法?
页:
[1]
2