질문과 답변

윈 도 우 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 - -
100245 윈 도 우| 19045.4651 7월 정기업데이트 통합하고 보니 kb5034441가 ... [4] SUbSigNal 522 07-13
100244 윈 도 우| 백업후 복원에러 질문입니다.. [6] 불형 485 07-12
100243 소프트웨어| Total Commander 내에서 여러 파일 열기 (실행) [4] Abundance 488 07-12
100242 소프트웨어| CPU-Z가 안될때 어떻게 작동중인 램클럭 확인할 수 있을까요? [3] 『ⓖⓤⓝ』 528 07-12
100241 소프트웨어| CPU-Z 64bit 가 실행이 안됩니다. [7] 좋게멋지게 312 07-11
100240 소프트웨어| 엑셀전문가님께 URL Link 관련 하여 여쭙니다 [2] 한아름 396 07-11
100239 서버 / IT| 공유기 램 부족 현상에 대해서 질문드립니다 [8] 한병 841 07-11
100238 윈 도 우| 윈도우11에서 음악재생시 음악재생정보 팝업메세지 [2] shy1911 223 07-11
100237 소프트웨어| 관리자 업데이트 패키지 청소 m zero 단독 프로그램 구합니다. [2] 한걸음 458 07-11
100236 윈 도 우| 윈도우 시작시 고급옵션 관련 [4] magoo 464 07-11
100235 소프트웨어| KMPlayer 실행 지연 해결방법 없을까요? [4] 부는바람 326 07-11
100234 소프트웨어| CPU-Z 실행이 안됩니다. [1] 좋게멋지게 297 07-11
100233 윈 도 우| temp 삭제 안됩니다. [9] 토니™짱야 441 07-11
100232 모 바 일| 갤럭시 삼성 노트에 문제가 생겼습니다. [4] 하늘은높고 575 07-10
100231 윈 도 우| 윈도우 헬로우 얼굴인식 알리발 ir카메라로 왜 안될까요? (... [4] 간디보더 300 07-10
100230 소프트웨어| Rainmeter에 관련 문의드립니다 [9] 화랑이 354 07-10
100229 하드웨어| SSD 상태가 궁금해서 질문드립니다. [4] 하늘개구 524 07-10
100228 소프트웨어| youtube 다운 잘 되시나요? [8] lyj 837 07-10
100227 윈 도 우| PE부팅시 DPI설정 100% → 150%로 디폴트 사용하고 싶습니다. [13] galgod 426 07-10
100226 윈 도 우| 브라우저가 갑자기 지 멋대로 실행됩니다. [3] anfy 568 07-09
XE1.11.6 Layout1.4.8