VBScript - показывает процент выполнения при копировании - PullRequest
0 голосов
/ 04 ноября 2019

Я стараюсь автоматизировать рутинные задания, используя VBScript и пытаюсь кодировать, чтобы показать процент выполнения при резервном копировании. Я использую Robocopy и его логи, чтобы вычислить процент в виде вложенного кода.

Проблема в том, что он не дублируется, потому что я думаю, что файл log.txt, который обновляется, заблокирован?

objFSO.CopyFile "C:\temp\log.txt", "C:\temp2\"

Я не думаю, что это хороший способ сделать это, но это все, что я могу придумать. Если есть лучший способ, я признателен, если вы поделитесь.

Заранее спасибо.

On Error Resume Next 
strComputer = "." 
strProcessToFind1 = "Robocopy.exe"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = Wscript.CreateObject("WScript.Shell")
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
totalToCopy = "C:\temp\totalToCopy.txt"

objShell.Run "Robocopy.exe C:\sourceFolder C:\destinationFolder /mir /l /log:" & totalToCopy & " /bytes /njh /nc /nfl /ndl /np", 0, True 
Dim arrFileLines()
i = 0
Set objFile = objFSO.OpenTextFile(totalToCopy, 1)
Do Until objFile.AtEndOfStream
     Redim Preserve arrFileLines(i)
     arrFileLines(i) = objFile.ReadLine
     i = i + 1
Loop
objFile.Close

j = 0
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
    j = j + 1
    If j = 4 Then ' find the total size of copy. always in 4th line of the file from bottom.
        totalSize = Replace(arrFileLines(l), "   Bytes : ", "")
        findSpace = InStr(1, totalSize, " ", 1)
        totalSize = Left(totalSize, findSpace - 1)
        Exit For 
    Else
    End If 
Next    

'================================================================================================

objShell.Run "Robocopy.exe C:\sourceFolder C:\destinationFolder /mir /log:C:\temp\log.txt /bytes /ndl /nc /np /njh", 0
sQuery = ("Select * from Win32_Process where name ='" & strProcessToFind1 & "'")
Do 
    objFSO.CopyFile "C:\temp\log.txt", "C:\temp2\"
    Set objFile = objFSO.OpenTextFile("C:\temp2\log.txt")
    sum = 0
    Do Until objFile.AtEndOfStream
        strTmp = objFile.ReadLine
        If strTmp = "" Then
        Else 
            strTmp = Replace(strTmp, " ", "")
            strTmp = Replace(strTmp, "  ", "") 
            findChar = InStr(1, strTmp, "C", 1)
            strTmp = Left(strTmp, findChar - 1)
            strTmp = CInt(strTmp)
            sum = sum + strTmp
        End If 
    Loop
    currentCopiedSize = CInt((sum / totalSize) * 100)
    WScript.Echo currentCopiedSize & "%"
    objFile.Close

    If objWMIService.ExecQuery(sQuery).Count > 0 then
    Else
        Exit Do                 
    End If  
    WScript.Sleep 3000      
Loop 
...