질문과 답변

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

2024.07.08 05:37

우리집 조회:320

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 - -
100378 소프트웨어| startallback 3.8 작업표시줄 문제가 생겼네요 ㅠㅠ [5] 건조한치는 290 08-01
100377 하드웨어| 이 오류는 어떤때 발생 하나요. [2] 이슬 415 08-01
100376 윈 도 우| startallbak에서 작업 표시줄 마우스 오른쪽 클릭시 [3] 영동할매 371 07-31
100375 윈 도 우| diskpart cmd 파일 어디 없나요? [2] hwangsan 501 07-30
100374 소프트웨어| vmware 에러 뭘까요? The processor does not support XSAVE. [6] 『ⓖⓤⓝ』 302 07-30
100373 윈 도 우| 무월님 Diskpart_Script_Selection 디스크 이름 한번 도... [2] 수리수리 219 07-30
100372 윈 도 우| 윈도우 보안 - 코어 격리 - 메모리 무결성 켬/끔 필요한가요? [4] ARGB 313 07-30
100371 윈 도 우| 무월님 여기에 어떻게 해야 컴퓨터가 종료 될까요^^ [5] 수리수리 689 07-29
100370 윈 도 우| 윈도우 11 탐색창에서 상위 폴더..가 안보입니다. [3] doha 277 07-29
100369 기 타| 데스크톱 화면이 전체 화면에 노이즈 발생하며 종종 Stop [4] 정의맨 269 07-29
100368 소프트웨어| 크롬 설정 중... [2] asklee 478 07-28
100367 소프트웨어| USB Pro 라는 포터블 런쳐를 아시는 분 계실까요? 사이먼로이 435 07-28
100366 윈 도 우| 윈10 Iot 버젼일때 구형프로그램 실행 안되는건가요?? [5] notaking 421 07-28
100365 소프트웨어| 한컴 오피스 문제 문의 [1] 강남역5번 582 07-28
100364 소프트웨어| 팀 뷰어에서 접속 시간에 대해 경험 자 및 고수 님께 자문... [9] 쟁고 340 07-28
100363 윈 도 우| 무월님 Diskpart_Script_Selection 배치 [2] 수리수리 315 07-27
100362 소프트웨어| autoit이나 자동화 잘 아시는 분 질문해요 [5] 사랑이7 270 07-27
100361 소프트웨어| Win10PE SE 2017-10-13 소장본 주십시오 [1] 넥스트타인블러 413 07-27
100360 기 타| Hasleo Backup Suite Free 라이센스 [2] 잇ZZY 317 07-27
100359 윈 도 우| 윈도우 날짜시간 동기화 유틸 또는 배치 [6] 수리수리 436 07-27
XE1.11.6 Layout1.4.8