질문과 답변

윈 도 우 PowerShell + (ROBOCOPY with progress bar) + (Total Commander)

2024.07.08 05:37

우리집 조회:411

PowerShell 사용하여 진행률 표시줄이 있는 ROBOCOPY 스크립트를 찿던중 다음과 같은

스크립트를 찿았습니다. (저는 PowerShell 문법 모릅니다)

(진행줄을 볼 수 있는것 중에는  속도도 괜찮고 같은파일 Skip도 확실해 보입니다)

 

※ 문의내용:

PowerShell 실행파일은 한글이나 영문이나 해시값도 같은 똑같은 파일인데

한글버전에서만 progress bar가 실행이 안되서 script 내용중 어디가 문제인지 문의 드립니다.

 

문제점:

1. 영문윈도우에서는 progress bar가 잘 보이는데 한글윈도우에서는 진행률 표시줄이 나타나지

않습니다

-한글 윈도우 테스트 버전: 윈도우11_23H2, 윈도우10 21H2 1803 2209  (X)

-영문 윈도우 테스트 버전: 윈도우10 19H2, 20H1, 22H2  (O)

 

2. [destIndex, length 및 배열의 하한을 확인하십시오]란 메시지가 간혹 보이긴한데

정상적으로 파일복사는 되는것 같습니다.

------------------------------------------------------------------------------------

Receive-Job : 대상 배열의 길이가 짧습니다. destIndex, length 및 배열의 하한을 확인하십시오.

위치 줄:28 문자:13

+ $progress = Receive-Job -Job $robocopyjob -Keep -ErrorAction Silently ...

+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : NotSpecified: (:) [Receive-Job], ArgumentException

    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ReceiveJobCommand

------------------------------------------------------------------------------------

 

※ 스크립트

----- 시작------------------------------------------------------------

$Source = "'$($args[0])'"

# 백업 파일 위치를 설정합니다.

$Destination = "'$($args[1])'"

# 파일이 저장될 위치를 설정합니다.

$robocmd = "robocopy " + $Source + " " + $Destination +  " /E /BYTES /mt /XF sync.ffs_db /R:1 /W:1 /DCOPY:DAT /COPYALL"

# robocopy를 사용하여 백업 명령 설정 // / mir copying 사용

$staging = invoke-expression "$robocmd /l"

# 먼저 테스트로 / l 매개변수를 사용하여 명령을 실행합니다 (아직 실제로 백업되지 않음 ).

$ttnewfile=$staging -match 'new file'

$ttmodified = $staging -match 'newer'

$totalfile = $ttnewfile + $ttmodified   

# 백업 해야 하는 모든 파일을 $totalfile 변수 에 저장합니다.

$ttBytearray = [System.Collections.ArrayList]@()

foreach ($file in $totalfile)

{

$arrayID = $ttBytearray.add($file.substring(13,13).trim()) 

# 텍스트를 파일 크기에 맞게 잘라서 $ttBytearray에 저장합니다.

# arrayID 섹션 에서 이 작업을 수행하지 않으면 일련번호 배열이 출력 에 표시됩니다 .

}

$totalByte = (($ttBytearray | measure-object -sum).sum)

# 복사해야 하는 모든 파일의 크기를 결합합니다.

#백업파일 시작

$robocopyjob = Start-Job -Name robocopy -ScriptBlock {param ($command) ; Invoke-Expression -Command $command} -ArgumentList $robocmd 

# 상태를 확인하기 위한 작업을 생성하여 데이터 백업을 시작합니다 .

while ($robocopyjob.State -eq 'running')

# 상태를 표시하기 위한 루프 검사

{

$progress = Receive-Job -Job $robocopyjob -Keep -ErrorAction SilentlyContinue

$totolFileCount = $totalfile.count

if ($progress)

{

$copiedfiles = ($progress | Select-String -SimpleMatch 'new file', 'newer')

            if ($copiedfiles) # null 값이 있는지 확인합니다 .

            {

            if ($copiedfiles.count -le 0) { $TotalFilesCopied = $copiedfiles.Count }

            else { $TotalFilesCopied = $copiedfiles.Count - 1 }

            $FilesRemaining = ($totalfile.count - $TotalFilesCopied)

            $Bytesarray = [System.Collections.ArrayList]@()

            foreach ($Newfile in $copiedfiles)   #count finished copy size

            {

                if($Newfile)

                {

                $curCopy =  $Bytesarray.add($Newfile.tostring().substring(13, 13).trim())

                # $Bytearray 변수 에 복사되는 파일의 크기를 저장합니다 .

                }

            }

            $TotalCopies = (($Bytesarray | measure-object -sum).sum)

            # 이미 복사된 파일의 크기를 알아냅니다.

            $PercentComplete = (($TotalCopies/$totalByte) * 100)

            # 현재 달성한 를 찾습니다.

            Write-Progress -Id 1 -Activity "Backup files, $TotalFilesCopied of $totolFileCount  " -Status "status" -PercentComplete $PercentComplete

            # 백업 상태를 표시하는 진행률 표시줄을 만듭니다 .

            }

}

}

Write-Progress -Id 1 -Activity "Copying files from $Source to $Destination" -Status 'Completed' -Completed 

# 데이터가 성공적으로 복사되었다는 상태를 보여주는 Create Progress입니다 .

$results = Receive-Job -Job $robocopyjob 

# 결과를 검색하여 $result 에 저장합니다.

Remove-Job $robocopyjob

# 생성된 작업을 닫습니다 .

    $results[5] 

    $results[-13..-1] 

    # 데이터를 검색하고 출력 에 표시하여 처음 5 줄과 마지막 13 줄을 표시합니다 .

$args[0]

# 원본에는 없는 공백있는 폴더명을 보기위해 삽입했습니다. 

$args[1]

$Source

$Destination

cmd /c pause | out-null

# 대기 명령 중지

---- 끝-------------------------------------------------------------------

 

*설명: 공백있는 폴더 처리를 위해 이렇게 했습니다.

$Source = "'$($args[0])'"

# 공백있는 폴더는 위와같이 해야 정상적으로 인식되더군요.

 

[Total Commander]

명령어:  PowerShell %COMMANDER_PATH%\Robocopy_ps\BackupPlan5b_Test.ps1

매개변수:  '%P%N' '%T%N'

 

-BackupPlan5b_Test.ps1 파일명이나 위치는 편하신데 설정하세요.

 

*참조 원본 사이트

ROBOCOPY with progress bar

https://lazedev.blogspot.com/2019/06/robocopy-with-progress-bar.html

 

240708_002712_1.png

 

240708_032749_1.png

 

240708_032814_1.png

 

240708_032828_1.png

 

Total Commander.png

 

에러메시지1.png

 

에러메시지보이지만 정상적으로 복사됨.png

 

번호 제목 글쓴이 조회 등록일
[공지] 질문과 답변 게시판 이용간 유의사항 gooddew - -
100344 윈 도 우| windows11 백업 실패 [3] toto65 518 07-26
100343 윈 도 우| 윈도우 사운드 설정문제 edge 엣지 고수님들 도와주세요 [1] 왕캔디 333 07-26
100342 소프트웨어| 7-Zip 우클릭 메뉴 언어문제 [11] 비상 339 07-26
100341 소프트웨어| Mp3Gain 성능 좋은 것 추천 부탁드립니다 [4] 이어도 500 07-26
100340 소프트웨어| 천리안이 곧 없어지는데 백업을 어찌 해야할 지... [3] lyj 570 07-26
100339 소프트웨어| patch.exe 파일을 디렉토리에 복사한뒤에 보이질 않습니다 [1] joe 274 07-26
100338 윈 도 우| 오늘 엣지 업데이트 후... [5] 앤드로 494 07-26
100337 윈 도 우| Acronis가 Universal 복구가 이제 없나요? [2] dittoda 486 07-26
100336 소프트웨어| ~$~1. 친구.docx [2] 덥다 568 07-25
100335 윈 도 우| 파일 속성 버튼 글자가 하얀색으로 바꼈는데 이거 해결법 ... [1] 카이시스 271 07-25
100334 모 바 일| 아이폰 유저인데요. 3uTools 로 파일을 영화를 옮겼는데 잘... [2] 나노오백 355 07-25
100333 소프트웨어| 자산관리 [2] First. 503 07-25
100332 윈 도 우| 실컴 빈 하드디스크에서 PE 부팅하기 [2] 나는돈 543 07-25
100331 소프트웨어| 배치파일 문의드립니다. [4] 티아코케 298 07-25
100330 기 타| 맥(MAC) 어드레스를 강제로 바꾸면 어떻게 될까요? [5] 루나헌터 517 07-25
100329 윈 도 우| 윈도우에서 다음 부팅때만 USB 부팅하기(BIOS X) [7] 피린이 420 07-25
100328 모 바 일| s22울트라인데, c-to-c 케이블로 45w초고속 무선충전이 되... [4] brucex 446 07-25
100327 윈 도 우| 시모스에서 사타포트1번 SSD가 부팅순서에 안뜨네요 [7] 『ⓖⓤⓝ』 430 07-24
100326 윈 도 우| 전원설정에 화면꺼짐시간이 자꾸 20분으로 변경되네요 [2] 『ⓖⓤⓝ』 340 07-24
100325 기 타| RFID, NFC 차폐 문의요 [2] 치토스 318 07-24
XE1.11.6 Layout1.4.8