找回密码
 加入
搜索
查看: 14133|回复: 18

[AU3基础] 检测文件夹内每个文件的大小

 火.. [复制链接]
发表于 2012-5-10 17:54:54 | 显示全部楼层 |阅读模式
悬赏10金钱已解决
本帖最后由 xyhqqaa 于 2012-5-17 13:51 编辑

主要是想检测邮箱内的dbx文件大小是否超过2G。。但是检测大小的时候返回值却为0.。新手迷茫下。。是参数使用错误还是语法有错。。

$user = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Accounts\", "last User ID")
$MAIL = RegRead("HKEY_CURRENT_USER\Identities\", "Last User ID")
$MAIL1 = RegRead("HKEY_CURRENT_USER\Identities\" & $MAIL & "\Software\Microsoft\Outlook Express\5.0\", "Store Root") ;邮件存储位置注册表



FindAllFile($MAIL1)
Func FindAllFile($sDir)
        Local $Search = FileFindFirstFile($sDir & "\*.*")
        ; 检查搜索是否成功
        If $Search = -1 Then Return
        While 1
                Local $sFile = FileFindNextFile($Search)
                If @error Then ExitLoop
                If @extended Then 
                        FindAllFile($sDir & "\" & $sFile)
                        ContinueLoop
                EndIf
        MsgBox("","",$sFile)
        WEnd
FileClose($Search)
$FIESIZE=FileGetSize($sFile);这边要改
EndFunc
附件: 您需要 登录 才可以下载或查看,没有账号?加入

最佳答案

查看完整内容

回复 5# xyhqqaa 非常抱歉,刚刚代码逻辑错误!3楼的代码我已经修改过了,你再试试!
发表于 2012-5-10 17:54:55 | 显示全部楼层
回复 5# xyhqqaa

非常抱歉,刚刚代码逻辑错误!3楼的代码我已经修改过了,你再试试!

评分

参与人数 1贡献 +10 收起 理由
xyhqqaa + 10 谢谢

查看全部评分

发表于 2012-5-10 18:45:30 | 显示全部楼层
mail 文件夹内全是 dbx 文件吗? 如果是,那么直接获取文件夹大小是不是更好?
发表于 2012-5-10 19:11:12 | 显示全部楼层
本帖最后由 水木子 于 2012-5-10 20:10 编辑

Global $iFileSize

$sFolder = ''  ;结尾不带 '\' 的文件夹路径

MsgBox(0, '', _FindAllFile($sFolder) / 1024 & ' KB')

Func _FindAllFile($sFilePath)
        Local $Search = FileFindFirstFile($sFilePath & '\*.*')
        ; 检查搜索是否成功
        If $Search = -1 Then Return

        While 1
                Local $sFile = FileFindNextFile($Search)
                If @error Then
                        Return $iFileSize
                Else
                        $iFileSize += FileGetSize($sFilePath & '\' & $sFile)
                        _FindAllFile($sFilePath & '\' & $sFile)
                EndIf
        WEnd

        FileClose($Search)
EndFunc   ;==>_FindAllFile

评分

参与人数 1金钱 +10 收起 理由
xyhqqaa + 10 谢谢参与。。。但测试返回值还是0 ,囧。。 ...

查看全部评分

 楼主| 发表于 2012-5-10 19:12:45 | 显示全部楼层
回复 2# 水木子


    水哥。。。 系统自带outlook邮箱蛋疼的问题,就是邮箱的dbx文件单个超过2G就会导致邮箱打开后邮件出错,我公司的就经常有处理业务经常不整理导致邮箱打开出错。所以就像弄个检测邮件的小工具。。当单个邮件超过1.5G的时候自动提醒。检测文件夹没效果。
 楼主| 发表于 2012-5-10 19:20:36 | 显示全部楼层
回复 3# 水木子


    水哥。。。代入实际地址测试。还是返回值为0.。。我再想想。。谢谢
发表于 2012-5-10 19:28:29 | 显示全部楼层
我们这边邮箱PST文件超过大小可以修复的,相信Outlook Express也没问题吧,还有你要检测每台PC的这个文件大小,你想过可操作性吗?我建议后台注册表找邮箱位置查看大小,判断超过2G发邮件highlight user

评分

参与人数 1金钱 +10 收起 理由
xyhqqaa + 10 谢谢分享。。

查看全部评分

 楼主| 发表于 2012-5-10 19:45:24 | 显示全部楼层
回复 6# 502762378

dbx超过两G的话是可以修复的。但是如果老出问题也不是办法。。,至于发布的话,那不是问题。。我想通过域策略应该可以实现。。。但是俺对您所说的后台找邮箱位置查看大小不解。。可能没接触过。。孤陋寡闻。。就想问下。。有什么好方法可以实现,注册表应该没有标明文件大小的???那该如何判断。。。希望分享下你那边的经验、。学习下
发表于 2012-5-10 20:31:08 | 显示全部楼层
你和我以前的思路一样,然后你会发现user机器的上的策略脚本会有一堆,肯定会影响user机器开机或者注销再或者关机的时间。我说的后台的意思是批量检测每个IP的DBX地址,然后后台用FileGetSize检测大小,超过1.5G发邮件,如果你得到对方的地址为:d:\mail,IP假设为:192.168.1.1是,你在后台用改IP有权限的账号登陆跑下边的脚本,是不是可以得到对方的大小
$sfile= "\\192.168.1.1\d$\mail\发件箱.dbx"
MsgBox(1,"",FileGetSize($sfile))
然后枚举判断大小发相关user邮件,是不是相对更智能些呢。当然你这个后台访问不了别的PC的HKEY_CURRENT_USER值项,但是肯定有其他方法得到该信息。
还有如果是我,我会用_FileListToArray
 楼主| 发表于 2012-5-11 09:03:43 | 显示全部楼层
回复 9# 502762378


   谢谢分享您的经验。。但是我说下个人观点啦,我这边个人也有带笔电。,蛋疼的是出问题还要帮忙维护。问题个人笔电都基本私人密码。所以您说的连接后台检测,实现有难度。还有通过判断大小发送信息提醒用户。。所以简化很多步骤。但是我们公司环境乱七八糟的。。管理密码有好几个。有的是旧的策略没更新还遗留的。所以连接难。。。我也想用您的方法尝试下、但感觉有点难度。倒不如让用户自己手动运行一次工具。也能实现简化我们工作量。。而且就算使用您的方法。我老大同意不同意还是问题。。因为能检测到使用者的邮件,可能会让用户缺乏安全感。。以后出现安全泄露就蛋碎了。可能考虑不周。。但目前就想到这些。。。。
 楼主| 发表于 2012-5-11 09:07:28 | 显示全部楼层
回复 3# 水木子


    水哥。。。。测试OK有返回值了。。。但。。。但。。。。那是文件夹大小的值。。。不是单文件的大小值。。阿门。。。
发表于 2012-5-11 11:00:32 | 显示全部楼层
回复 11# xyhqqaa


    笔电不管是管理还是安全都应该都令一套管理方案吧。我很欣慰了,最起码你明白我的意思了,随便用_FileListToArray帮你改了改,你试试,如果还不行,你用FileGetSize制定路径看看能不能得到信息
#Include <File.au3>
$user = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Accounts", "last User ID")
$MAIL = RegRead("HKEY_CURRENT_USER\Identities", "Last User ID")
$MAIL1 = RegRead("HKEY_CURRENT_USER\Identities" & $MAIL & "\Software\Microsoft\Outlook Express\5.0", "Store Root") ;邮件存储位置注册表
 Local $FileList = _FileListToArray($MAIL1)
If @error = 1 Then
    MsgBox(4096, "", "No Folders Found.")
    Exit
EndIf
If @error = 4 Then
    MsgBox(4096, "", "No Files Found.")
    Exit
EndIf
For $n = 1 To $FileList[0]
        MsgBox(1,"",FileGetSize($FileList[$n]))
Next

评分

参与人数 1金钱 +10 收起 理由
xyhqqaa + 10 谢谢分享。。。。我想找找适合我们这边环境 ...

查看全部评分

发表于 2012-5-14 15:29:42 | 显示全部楼层

评分

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

查看全部评分

 楼主| 发表于 2012-5-17 10:43:31 | 显示全部楼层
$user = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Accounts\', 'last User ID')
$Mail = RegRead('HKEY_CURRENT_USER\Identities\', 'Last User ID')
$Mailadr = RegRead('HKEY_CURRENT_USER\Identities\' & $MAIL & '\Software\Microsoft\Outlook Express\5.0\', 'Store Root') ;邮件存储位置注册表



FindAllFile($Mailadr)
Func FindAllFile($sDir)
        Local $hSearch = FileFindFirstFile($sDir & "\*.dbx")
        If $hSearch = -1 Then Return; 检查搜索是否成功
        While 1
                Local $sFile = FileFindNextFile($hSearch)
                If @error Then ExitLoop
                If @extended Then 
                        FindAllFile($sDir & "\" & $sFile)
                        ContinueLoop
                        EndIf
                $filesiezs=FileGetSize($sDir & "\" & $sFile)
                $sizes=Round($filesiezs/ 1048576 ,0)
            msgbox("","",$sizes&" MB")
                 
WEnd
        FileClose($hSearch); 关闭搜索句柄
EndFunc
 楼主| 发表于 2012-5-17 13:46:27 | 显示全部楼层
自己看帮助。。。问题已经解决了。。。但还是谢谢水哥跟502762378的帮助
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 18:23 , Processed in 0.093233 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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