>

파일 수가 많고 (4 백만 이상) 작은 단계를 거쳐 이름을 바꾸고 다른 폴더로 옮겨야합니다.

powershell의 초보자이지만, 100 개 파일의 작은 패키지로 이미 이동했습니다 (powershell 스크립트는 예약 된 작업으로 실행 됨).

그러나 지금까지 파일 이름을 바꾸지 못했습니다. 각 파일에는 교체해야하는 두 개의 문자열이 있습니다. 이름 바꾸기 부분 (12 행 및 13 행)을 제외하고 다음 코드는 제대로 작동합니다.

#Get 'n' number of files
$FileLimit = 100 
$PickupDirectory = Get-ChildItem -Path "\\server\path$\ERROR\subfolder\"
$DropDirectory = "\\server\path$\destination\"
$Counter = 0
foreach ($file in $PickupDirectory)
{
    if ($Counter -ne $FileLimit)
    {
        $file | Rename-Item -NewName {$_.name -replace '999999','367'}
        $file | Rename-Item -NewName {$_.name -replace 'oldname','newname'}
        $Destination = $DropDirectory+$file.Name
        Move-Item $file.FullName -destination $Destination
        $Counter++
    }  
}
exit

파일 이름을 바꾸는 올바른 방법은 무엇입니까?

도움을 주셔서 감사합니다! 최고의 소원 필립

편집 : 죄송합니다. 오류 로그는 다음과 같습니다.

Rename-Item : Cannot rename because item at 'Microsoft.PowerShell.Core\FileSystem::\\server\path$\ERROR\subfolder\1566392#5990762$20180116^999999_2018_01_16_oldname_1566392_Kägi.pdf' does not exist.
At C:\Scripts\mv_Verordnung_für_Physiotherapie.ps1:12 char:28
+ ... pDirectory | Rename-Item -NewName {$_.name -replace '^999999','^367'}
+                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

Edit2 : 주석에서 팁으로 코드를 업데이트했습니다. 여전히 같은 오류입니다.


  • 답변 # 1

    Get-ChildItem 를 사용하여 초기에 제한을 수행해야합니다 (필요한 경우).  =>

    $PickupDirectory = Get-ChildItem -Path "\\server\path$\ERROR\subfolder\" | Select -First $FileLimit
    
    
    <올>

    현재 반복되는 항목 ($file)을 사용하는 대신 전체 배열 $PickupDirectory 를 사용합니다

    2. 교체를 이미 변경된 값에 적용 할 수 없습니다.

    이름 바꾸기 및 이동 대신 한 단계로 수행하십시오.

    #Get 'n' number of files
    $FileLimit = 100 
    $PickupDirectory = Get-ChildItem -Path "\\server\path$\ERROR\subfolder\" | Select -First $FileLimit
    $DropDirectory = "\\server\path$\destination\"
    foreach ($file in $PickupDirectory){
        $Destination = Join-Path $DropDirectory ($file.Name -replace '^999999','^367' `
                                                            -replace 'oldname','newname')
        $file | Move-Item -Destination $Destination
    }
    
    

  • 답변 # 2

    Rename-Item 에 전화   $PickupDirectory 에  수집. 대신 $file 에 전화하십시오   foreach 에서 사용중인 변수  루프 :

    $file | Rename-Item -NewName { $_.name -replace '^999999', '^367' }
    $file | Rename-Item -NewName { $_.name -replace 'oldname', 'newname' }
    
    

관련 자료

  • 이전 tsql - 문자열 평가를 기반으로 새 비트 열 생성
  • 다음 graph - 파이썬의 인접 목록에서 최소 n 개의 모서리를 가진 정점 목록을 반환하는 방법은 무엇입니까?