robocopy 问题,怎么获得文件数. 文件大小. 文件名(解决)
本帖最后由 夜猫猫 于 2011-8-16 11:45 编辑DOS回显:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows :: Version XP010
-------------------------------------------------------------------------------
Started : Thu Aug 11 11:59:14 2011
Source = D:\活佛济公2\
Dest : G:\活佛济公2\
Files : *.*
Options : *.* /S /E /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
60 D:\活佛济公2\
Newer 146.1 m 活佛济公2.24.vcd.rmvb
0.0%0.0%0.0%0.1%0.1%0.2%0.2%0.2%0.3%0.3%.............100%
New File 144.2 m 活佛济公2.25.vcd.rmvb0.0%0.0%0.0%0.1%0.1%0.2%0.2%0.3%0.3%0.3%0.4%
% 中间很多删了已经能获取百分比,该怎么获取上面数值里的文件数. 文件大小. 文件名代码:
#include <Constants.au3>
#include <GUIConstants.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("测试", 391, 343, 283, 137)
$Pic1 = GUICtrlCreatePic(@ScriptDir&"\1.BMP", 16, 0, 360, 217)
$Label1 = GUICtrlCreateLabel("文件总数: 个", 32, 232, 250, 17)
$Label2 = GUICtrlCreateLabel("剩余文件: 个", 216, 232, 250, 17)
$Label3 = GUICtrlCreateLabel("文件大小:", 32, 256, 80, 17)
$Label4 = GUICtrlCreateLabel("传输速度: MB/秒", 216, 256, 159, 17)
$Progress1 = GUICtrlCreateProgress(16, 280, 318, 16)
$Label5 = GUICtrlCreateLabel("% ", 340, 282, 25, 17)
$Progress2 = GUICtrlCreateProgress(16, 312, 358, 16)
$Label6 = GUICtrlCreateLabel("", 176, 314, 30, 16)
GUICtrlSetBkColor(-1, -2)
GUICtrlSetFont(-1, 9, 800)
GUICtrlSetColor(-1, 0xff0080)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$sourcedir = "D:\活佛济公2"
$destdir = "G:\活佛济公2"
$ourProcess = Run (@ComSpec & " /c " & 'robocopy.exe ' & $sourcedir & ' ' & $destdir & ' /E', @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
While 1
If $ourProcess Then
$charsWaiting = StdoutRead($ourProcess)
FileWrite(@ScriptDir& "\1.txt",$charsWaiting)
If $charsWaiting Then
$currentRead = StdoutRead($ourProcess)
$percent = StringRegExp($currentRead, '({1,3})(?:.{1,3})(?:%)',3);获取百分比
If IsArray($percent) = 1 Then
GUICtrlSetData($Progress1 ,$percent)
GUICtrlSetData($Progress2, $percent)
GUICtrlSetData($Label5,$percent&"% ")
GUICtrlSetData($Label6,$percent&"% ")
EndIf
EndIf
EndIf
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ProcessClose("robocopy.exe")
Exit
EndSwitch
WEnd
本帖最后由 powerofos 于 2011-8-11 13:09 编辑
提供个别样的方法,调用copy.dll实现的文件复制,但你是使用robocopy.exe,不知道合不合适你。
本帖最后由 夜猫猫 于 2011-8-11 14:42 编辑
用不上{:face (394):}
主要是需要知道正在传的文件名是什么。其他就好办。
正则能获取New File 144.2 m 活佛济公2.25.vcd.rmvb0.0%这句New File与0.0%之间的数吗? 本帖最后由 powerofos 于 2011-8-11 19:09 编辑
不知道你是怎样的一个复制环境,我很久前用copy.dll试验过,可以随意复制指定某文件夹(内容),当然也能知道正在复制那一个文件,包括文件名。
-----------------------------------------------------------------------------------------------------------------------------------------------
嘿嘿,我翻了一下以前的源码,呵呵,所谓的复制某文件夹下内容是先:_FileListToArray() 的产物...估计楼主是用不上了 $array = StringRegExp($charsWaiting, 'New File\h{5}(.*?)\h(.*?)\h(.*?)\r\h{2}0.0%6',3)
获取文件名 大小
读TXT能正常显示。但读StdoutRead($ourProcess)但是不能显示。返回数值1
{:face (207):}
页:
[1]