找回密码
 加入
搜索
查看: 4390|回复: 13

[AU3基础] 求助关于调用Beyond Compare 2的问题

  [复制链接]
发表于 2012-7-4 14:58:33 | 显示全部楼层 |阅读模式
我想调用BC2 来组个同步
现在是可以同步了。。
但缺少个进度条。。
求大大们帮忙指导下!
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>


$soft = @WindowsDir &"/temp/bc3.exe"
$Vbc = @WindowsDir &"/temp/bc.txt"
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Bc2", 370, 287, 261, 202)
$Group1 = GUICtrlCreateGroup("", 8, 8, 353, 193)
$Input1 = GUICtrlCreateInput("D:\聊天冲浪", 121, 47, 121, 21)
$Button1 = GUICtrlCreateButton("浏览", 249, 44, 28, 28)
$Button2 = GUICtrlCreateButton("浏览", 249, 86, 28, 28)
$Input2 = GUICtrlCreateInput("E:\聊天冲浪", 121, 89, 121, 21)
$Progress1 = GUICtrlCreateProgress(56, 144, 262, 16)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("", 8, 208, 353, 65)
$Button3 = GUICtrlCreateButton("对  比", 88, 232, 75, 25)
$Button4 = GUICtrlCreateButton("关  闭", 200, 232, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_SYSCOMMAND, "WM_SYSCOMMAND")

While 1
        Sleep(1000)
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
        Local $iCtrl = BitAND($wParam, 0x0000FFFF)
        Local $iCode = BitShift($wParam, 16)
        Switch $hWnd
                Case $Form1
                        Switch $iCtrl
                                Case $Button1
                                        Ycliulan()
                                Case $Button2
                                        Bdliulan()
                                Case $Button3
                                        duibi()                                        
                                Case $Button4
                                        Exit
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
        Local $nID = BitAND($wParam, 0x0000FFFF)
        Switch $nID
                Case 0xf060
                        If $hWnd = $Form1 Then
                                Exit
                        Else
                                GUIDelete($hWnd)
                        EndIf
        EndSwitch
EndFunc   ;==>WM_SYSCOMMAND

Func duibi()
        $Yuancheng = GUICtrlRead($Input1)
        $bendi = GUICtrlRead($Input2)
        If FileExists($bendi) <> 1 Then 
                DirCreate($bendi)
        EndIf
        Azbc()
    $Bctxt = FileOpen($Vbc, 2)
    FileWriteLine ($Bctxt,"load "& $Yuancheng &" "& $Bendi &"")
    FileWriteLine ($Bctxt,"expand all")
    FileWriteLine ($Bctxt,"select rt.orphan")
    FileWriteLine ($Bctxt,"delete rt")
    FileWriteLine ($Bctxt,"option confirm:yes-to-all")
    FileWriteLine ($Bctxt,"select lt.newer.files lt.older.files lt.orphan lt.diff.files")
    FileWriteLine ($Bctxt,"copy lt->rt")
    FileClose ($Bctxt)
        _rundos ("del /f /s /q %temp%\*.*")
    sleep(2000)
    Run ($soft &" @"& $Vbc &" /silent")
                While ProcessExists("BC3.exe") <> 0 
                        Sleep(3000)
                WEnd
        Scbc()
EndFunc

Func Azbc()
        FileInstall("bc3.exe",@WindowsDir &"/temp/bc3.exe")
        FileInstall("bc3Key.txt",@WindowsDir &"/temp/BC3Key.txt")
EndFunc

Func Scbc()
        FileDelete(@WindowsDir &"/temp/bc3.exe")
        FileDelete(@WindowsDir &"/temp/Bc3key.txt")
        FileDelete($Vbc)
EndFunc

Func Ycliulan()
        $ll=FileSelectFolder("浏览","")
        If FileExists($ll) Then
                GUICtrlSetData($Input1,$ll)
        EndIf
EndFunc

Func Bdliulan()
        $ll1=FileSelectFolder("浏览","")
        If FileExists($ll1) Then
                GUICtrlSetData($Input2,$ll1)
        EndIf
EndFunc



        
所需Beyond Compare 在附件里!

本帖子中包含更多资源

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

×
发表于 2012-7-4 16:23:32 | 显示全部楼层
回复 1# 49666684

建议在主界面增加个'进度条', 在以下循环中改写进度条的值.
While ProcessExists("BC3.exe") <> 0
                        Sleep(3000)
  WEnd

用 DirGetSize 目标文件夹及源文件夹的字节大小, 按其对比值来改写进度条
 楼主| 发表于 2012-7-4 16:36:49 | 显示全部楼层
也正在研究用文件数量来做进度条

问题是。如果源路径设置吃FTP的话。怎么样才能获取FTP上的文件数量呢?
 楼主| 发表于 2012-7-5 13:35:32 | 显示全部楼层
囧了 。没有人指导下么?
 楼主| 发表于 2012-7-5 14:57:24 | 显示全部楼层
在 论坛里搜到一个 遍历搜索FTP文件,出现问题 的帖子
根据帖子修改了 下
但貌似比较繁琐,,,,请大大们。帮忙指导下 !!!谢谢
#include <FTPEx.au3>
#include <Array.au3>

$server = '192.168.0.2'  ;服务器
$name = 'Anonymous'              ;用户名
$pass = ''              ;密码
$Port = '21'         ;端口
$path = "\soft"          ;路径
Global $Gs,$ZGs
ftp($server,$name,$pass,$port,$path)
MsgBox (0,0,$gs)

Func ftp($server,$name,$pass,$port,$path)
$Open = _FTP_Open('MyFTP')  ;打开一个FTP会话
$Conn = _FTP_Connect($Open,$server,$name,$pass,0,$port)  ;连接到ftp服务器
_FTP_DirSetCurrent($Conn, $path)
$aFile = _FTP_ListToArrayEx($Conn,0,0)  ;列目录(0=文件和目录,1=目录,2=文件)(格式0=mm/dd/yyyy,1=yyyy/mm/dd)
;~ _ArrayDisplay($aFile)
$Gs = $aFile[0][0]
        for $i = 1 to $aFile[0][0]
        If $aFile[$i][2] = 16 And $aFile[$i][0] == "." Then
                        $Gs = $Gs - 1
                ElseIf $aFile[$i][2] = 16 And $aFile[$i][0] == ".." Then
                        $Gs = $Gs - 1
                ElseIf $aFile[$i][2] = 16 And $aFile[$i][0]<>"." And $aFile[$i][0]<>".." Then
                        $Gs = $Gs - 1
                EndIf
        Next
                $gs = $gs + $ZGs
        For $j = 1 To $aFile[0][0]
                If $aFile[$j][2] = 16 And $aFile[$j][0]<>"." And $aFile[$j][0]<>".." Then
                        $path = "\soft"    
                        $path=$path&$aFile[$j][0]&""
;~                         MsgBox (0,1,$path)
                        Zmu($server,$name,$pass,$port,$path)                        
                EndIf
        Next
$Ftpc = _FTP_Close($Open)  ;关闭 _FTP_Open 打开的回话
EndFunc

Func Zmu($server,$name,$pass,$port,$path)
$Open = _FTP_Open('MyFTP')  ;打开一个FTP会话
$Conn = _FTP_Connect($Open,$server,$name,$pass,0,$port)  ;连接到ftp服务器
_FTP_DirSetCurrent($Conn, $path)
$aFile = _FTP_ListToArrayEx($Conn,0,0)  ;列目录(0=文件和目录,1=目录,2=文件)(格式0=mm/dd/yyyy,1=yyyy/mm/dd)
;~ _ArrayDisplay($aFile)
;~ MsgBox(0,"$aFile[$i][0个]文件名",$aFile[0][0])
$ZGs = $aFile[0][0]
        for $i = 1 to $aFile[0][0]
        If $aFile[$i][2] = 16 And $aFile[$i][0] == "." Then
                        $ZGs = $ZGs - 1
                ElseIf $aFile[$i][2] = 16 And $aFile[$i][0] == ".." Then
                        $ZGs = $ZGs - 1
                ElseIf $aFile[$i][2] = 16 And $aFile[$i][0]<>"." And $aFile[$i][0]<>".." Then
                        $ZGs = $ZGs - 1
                EndIf
        Next
        $gs = $gs + $ZGs
        For $j = 1 To $aFile[0][0]
                If $aFile[$j][2] = 16 And $aFile[$j][0]<>"." And $aFile[$j][0]<>".." Then
                        $Zpath=$path&$aFile[$j][0]&""                        
                        Zmu($server,$name,$pass,$port,$zpath)
                EndIf
        Next
$Ftpc = _FTP_Close($Open)  ;关闭 _FTP_Open 打开的回话
EndFunc
 楼主| 发表于 2012-7-6 13:19:38 | 显示全部楼层
没有人来指导指导么?
发表于 2012-7-6 13:30:17 | 显示全部楼层
回复 7# 49666684

要遍历FTP?
  不如设置  BC 同步文件时记录下详细的操作日志.
AU3脚本反复读取此文件,  用正则处理获取'文件数'来响应进度.
虽然麻烦, 但比遍历FTP的效率高百倍吧?
 楼主| 发表于 2012-7-8 14:07:36 | 显示全部楼层
貌似有点深奥~
发表于 2012-7-8 16:16:02 | 显示全部楼层
下面是个日志文件的部分内容, 甚至可以提取到文件名, 它是每成功对比一个文件后立即写入到日志中的.
如果只是想获取文件数, 读取文件的总行数后减去2.....这深不到哪去.
BC的设置: 工具 -> 选项 -> 日志 -> 全勾上, 并设置好日志输出的路径即可.

2012-07-08 16:01:05  用户名:PC--20120524DOD\Administrator
2012-07-08 16:01:05  加载比较:Z:\单机游戏\神话时代 <-> E:\TDDOWNLOAD
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\Acommlog.txt到E:\TDDOWNLOAD
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\1028\dwintl.dll到E:\TDDOWNLOAD\1028
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\1028\msiloadr.bin到E:\TDDOWNLOAD\1028
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\1028\webloadr.bin到E:\TDDOWNLOAD\1028
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\aom.exe到E:\TDDOWNLOAD
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\1029\dwintl.dll到E:\TDDOWNLOAD\1029
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\autopatcher.exe到E:\TDDOWNLOAD
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\1030\dwintl.dll到E:\TDDOWNLOAD\1030
2012-07-08 16:01:24  复制Z:\单机游戏\神话时代\binkw32.dll到E:\TDDOWNLOAD
 楼主| 发表于 2012-7-10 15:21:35 | 显示全部楼层
那问题是 同步完了才 输出的日志啊。
发表于 2012-7-10 15:54:21 | 显示全部楼层
回复 10# 49666684

我用的是 BC 3, 操作日志是实时输出的.
刚试了 BC 2 , 也是实时输出的. 但 BC 2 日志设置有所不同:
工具栏选"查看" -> 程序日志 -> 详细日志  最后选 '写入到..." 设置好输出路径.
发表于 2012-7-11 01:43:01 | 显示全部楼层
小弟愚钝 BC是啥
发表于 2012-7-11 02:22:52 | 显示全部楼层
回复 12# ooxxgod

你这家伙, 近来'疯狂'跟帖, 但其实都没仔细阅读帖子内容吧?
你等级也上来了, 再这样乱说话, 最终丢也是你自己的脸哦!

你看下楼主的标题? 再看下他1楼的第一句话?
希望你引此为鉴.
(因为年纪大点,所以有点啰嗦, 看不顺眼的, 当作没看见即可.)
 楼主| 发表于 2012-7-12 10:47:33 | 显示全部楼层
我现在也 换成BC3了。呵呵。在研究下。。谢谢楼上。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 03:54 , Processed in 0.245697 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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