질문과 답변

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

2024.07.08 05:37

우리집 조회:405

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 - -
100227 윈 도 우| PE부팅시 DPI설정 100% → 150%로 디폴트 사용하고 싶습니다. [13] galgod 426 07-10
100226 윈 도 우| 브라우저가 갑자기 지 멋대로 실행됩니다. [3] anfy 569 07-09
100225 윈 도 우| Kb5034441 설치 오류 [2] 솔모로 540 07-09
100224 소프트웨어| 부팅 메시지 삭제하는 방법 문의 [13] Lepton2 586 07-09
100223 윈 도 우| 윈도우 usb외장 부팅 만들기 [7] 수리수리 676 07-09
100222 윈 도 우| PC방 노하드시스템 잘아시는분계신가요? [8] ARGB 960 07-08
100221 기 타| 외부에서 데탑의 파일을 보고싶습니다. [10] 대조선언니 651 07-08
100220 기 타| 키보드의 윗 방향 방향키(↑)를 한번 눌러도 쭉 위로 계속... [4] pinnk 474 07-08
100219 윈 도 우| 윈도우 프로페셔널이 프로인가요? [4] WinNTLiteDev 613 07-08
100218 기 타| 인터넷 지원금 받는 법 문의 [4] asklee 586 07-08
100217 윈 도 우| 윈도우10 32비트를 윈도우11로 업데이트 가능할까요? [18] 프라이멀 570 07-08
100216 윈 도 우| 엣지 완전 초기화 [2] 개골동자 750 07-08
100215 하드웨어| 5600 업그레이드중 램슬롯 고장?????? [1] toto65 498 07-08
» 윈 도 우| PowerShell + (ROBOCOPY with progress bar) + (Total Comm... [5] 우리집 405 07-08
100213 소프트웨어| 크롬과 엣지 브라우저 각각에서 "즐겨찾기"가 추... [12] 수학으로의 489 07-07
100212 윈 도 우| 윈도우 드라이브명 바꾸기 [3] 군수과왕고 545 07-07
100211 소프트웨어| 실시간 스트리밍 영상을 녹화할만한 유틸은? [2] 지나다 499 07-07
100210 윈 도 우| 윈도우11 업데이트 질문? [3] 맹물 326 07-07
100209 소프트웨어| 크롬 북마크(즐겨찾기) [2] 곰바다 341 07-07
100208 기 타| (ahk) 엔터없이 입력하는 법 좀 부탁드립니다 [1] UU自適 357 07-07
XE1.11.6 Layout1.4.8