找回密码
 加入
搜索
查看: 2896|回复: 1

[原创] 比特精灵文件移动小助手

[复制链接]
发表于 2010-10-14 10:23:04 | 显示全部楼层 |阅读模式
使用比特精灵下载BT ,下载完成后 自动移动文件至磁盘其它位置(原来比特精灵有此功能,后来被认为是鸡肋,去除了)
做种期间,不移动文件,做种结束后移动,自动生成日志(仅记录成功和失败的任务),可通过手动配置文件来指定”目标文件夹 dir“和“循环检查文件是否被占用的间隔时间 time”(毫秒)
配置文件
[setting]
dir=f:\
time=122000
利用比特精灵的“病毒检查”来完成,如图设置
源码:
#NoTrayIcon
#include <array.au3>
#include <file.au3>
#Include <WinAPI.au3>





$settingfilename = @ScriptDir&"\"&StringTrimRight(@ScriptName, 3) & "ini"   ;配置文件名
If Not FileExists($settingfilename) Then IniWriteSection($settingfilename,'setting',"dir=f:\" & @LF & "time=122000" )   ;如果没有配置文件,则自动生成
$logfile=@ScriptDir&"\moved.log"   ;日志文件

$destdir=IniRead($settingfilename,"setting",'dir',"f:\")    ;读取配置中的目标位置
$time=IniRead($settingfilename,"setting",'time',122*1000);读取配置中的间隔时间



If $cmdline[0] > 0 Then
        Sleep($time)
        $starttime=@YEAR&'-'&@MON&'-'&@MDAY&' '&@WDAY&' '&@HOUR&':'&@MIN&':'&@MSEC
        $ii=0
        
        $files=_FileSearchToArray($CmdLine[1] , "*", 1)
;~         _ArrayDisplay($files)
        Do 
        $a=0
        If IsArray($files) Then
                For $i=1 To $files[0]
                        $a+=_IsUseIng($files[$i])
                Next
        EndIf
;~         If $a=0 Then
;~                 MsgBox(0,"no","no")
;~         Else
;~                 MsgBox(0,'yes','yes')
;~         EndIf
If $a>0 Then
;~         MsgBox(0,'file using','fileusing',4)
        Sleep($time)
        ContinueLoop
EndIf

        Until $a=0
        
        
        
        
        
        Do 
                $ii+=1
                
        $a=DirMove( $CmdLine[1] ,$destdir ,1)
        If $ii=3 Then         ExitLoop
        
Until $a=1
$hfile=FileOpen($logfile,1)
If $ii <3 Then
        
        FileWriteLine($hfile,$starttime&'<==>'&@YEAR&'-'&@MON&'-'&@MDAY&' '&@WDAY&' '&@HOUR&':'&@MIN&':'&@MSEC&'     '&$CmdLineRaw&' 成功')
Else
        FileWriteLine($hfile,$starttime&'<==>'&@YEAR&'-'&@MON&'-'&@MDAY&' '&@WDAY&' '&@HOUR&':'&@MIN&':'&@MSEC&'     '&$CmdLineRaw&' 失败  ' & $i)
EndIf

        FileClose($hfile)
EndIf

        Func _FileSearchToArray($sPath, $sFilter = "*", $sFalg = 0, $sSub = True)
        Local $sfilelist[1]
        Local $sOutdir = @ScriptDir
        If StringRight($sOutdir,1)<>"\" Then $sOutdir = $sOutdir & "\"
        If StringRight($sPath, 1) <> "\" Then $sPath = $sPath & "\"
        ;-----------修正bug: 使用dir时,如果搜索目录与临时目录有包含,会多出一个临时文件--------------
        If $sSub Then
                If StringLeft($sOutdir, StringLen($sPath))=$sPath Then
                        $sOutdir = @TempDir & "\"
                        If StringLeft($sOutdir, StringLen($sPath))=$sPath Then $sOutdir = @WindowsDir & "\"
                EndIf
        Else
                If $sOutdir = $sPath Then
                        $sOutdir = @TempDir & "\"
                        If @TempDir=@ScriptDir Then $sOutdir = @WindowsDir & "\"
                EndIf
        EndIf
        ;-----------------------------------------------------------------------------------
        Local $sOUT = $sOutdir & "temp_filelist.txt"
        Local $bBak=False, $sBakFile=@tempdir&"\temp_$$$$bak.txt"
        If FileExists($sOUT) Then ;原文件备份
                FileMove($sOUT, $sBakFile, 1)
                $bBak=True
        EndIf
        _FileCreate($sOUT)
        If @error Then        
                $sfilelist[0] = -1
                If $bBak Then FileMove($sBakFile, $sOUT, 1)
                Return $sfilelist;文件无法创建,$sfilelist[0] = -1,此函数无法应用,因为必须创建临时文件
        EndIf
        If StringInStr(FileGetAttrib($sPath),  "D")<=0 Then
                $sfilelist[0] = -2
                If $bBak Then FileMove($sBakFile, $sOUT, 1)
                Return $sfilelist;无此目录,返回-2,不用浪费时间了
        EndIf
        If $sSub Then
                $sSub = " /s"
        Else
                $sSub = ""
        EndIf
        If StringReplace($sFilter," ","") = "" Then $sFilter = "*"
        $sFalg = Int($sFalg)
        If $sFalg<0 Or $sFalg>2 Then $sFalg=0;规范$sFalg
        Select
                Case $sFalg = 1;只文件
                        $sFalg = "/a:-d"
                Case $sFalg = 2;只目录
                        $sFalg = "/a:d"
                Case Else
                        $sFalg = "/a"
        EndSelect
        RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & $sFilter & '" ' & $sFalg & ' /b' & $sSub & ' > "' & $sOUT & '"', '', @SW_HIDE)
        ;Local $t=TimerInit()
        _FileReadToArray($sOUT, $sfilelist)
        If Not IsArray($sfilelist) Then
                Local $sfilelist[1]
                $sfilelist[0] = 0
                If $bBak Then FileMove($sBakFile, $sOUT, 1)
                Return $sfilelist;该目录无文件
        Else
                If $sfilelist[$sfilelist[0]] = "" Then;最后一行
                        _ArrayDelete($sfilelist, $sfilelist[0])
                        ;ReDim $sfilelist[$sfilelist[0]]
                        $sfilelist[0] = $sfilelist[0] - 1
                EndIf
        EndIf
        ;ConsoleWrite(TimerDiff($t)/1000&@CRLF)
        Local $x
        If $sSub = "" Then
                For $x = 1 To $sfilelist[0]
                        $sfilelist[$x] = $sPath & $sfilelist[$x]
                Next
        EndIf
        FileDelete($sOUT)
        If $bBak Then FileMove($sBakFile, $sOUT, 1)
        Return $sfilelist
EndFunc   ;==>_FilesearchToArray


Func _IsUseIng($hFile)
        If Not FileExists($hFile) Then Return False        
        $hFile = _WinAPI_CreateFile($hFile, 2,6)
        If $hFile=0 Then 
                Return 1
        Else
                _WinAPI_CloseHandle($hFile)
                Return 0
        EndIf
EndFunc
;~ a检测文件是否正被使用
;~ 返回值:false=未使用
;~ 返回值:true=使用中

本帖子中包含更多资源

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

×
发表于 2010-10-14 17:47:51 | 显示全部楼层
支持你, 想法很好啊, 再接再厉
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-4 19:13 , Processed in 0.072735 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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