PowerShell의 다른 디스크에있는 일치하는 이름 파일로 여러 파일 이동

Aug 16 2020

2 부분으로 나누어 진 거대한 토렌트 (6000 개 이상의 폴더가있는 1.2tb)를 다운로드하고 있었기 때문에 2 번째 부분을 설계된 장소에 배치했는데 토렌트의 마스터 폴더가 정확히 필요한 것이기 때문에 문제가되지 않았습니다. 첫 번째 부분 마스터 폴더는 내가 필요로하는 이름 대신 일반적인 토렌트 이름으로 명명되었으므로 토렌트 이름을 "source"로 바꾸는 대신 작동했을 것이고 현재 일반 이름을 "source"로 바꿨을 것입니다. 파일 탭에서 모든 파일을 선택하고 모든 파일을 마우스 오른쪽 버튼으로 클릭> 재배치하면 bittorrent는 하위 폴더없이 모든 파일을 동일한 디렉토리로 이동하고 엉망이되었습니다.

그래서 나는이 토런트의 미완성 백업을 가지고 있고 파일이 제자리에 있으므로 미완성 된 이름을 사용하고 완성 된 것과 일치하고 완성 된 것을 미완성 일치 이름의 경로 폴더에 넣는 것이 었습니다. 분명했으면 좋겠어요.

PowerShell을 사용하여이 문제를 해결하려고했지만 많이 알지 못해서이 문제를 생각 해냈고 아무 일도 일어나지 않았습니다. 뭔가 잘못되었습니다. 누구든지 해결책을 알고 있습니까?

$itemlistA = Get-ChildItem -Path "D:\BitTorrent\" | ForEach-Object { $objnameA = $_.Name $objPathA = $_.FullName } $itemlistB = Get-ChildItem -Path "E:\DesiredPath\" -recurse | 
ForEach-Object{
    $objnameB = $_.Name
    $objPathB = $_.FullName
}

ForEach-Object{ 
    if($objnameA -eq $objnameB){
        Copy-Item -path $objPathA -Destination $objPathB
        Write-Host "ffff    Object ($objnameA) new Path ($objPathB)     ffff"
    }
}

답변

derekbaker783 Aug 16 2020 at 19:28

귀하의 의도를 올바르게 이해하고 있다면 아래 스크립트가 목표를 달성 할 것입니다. 귀하의 목표는 병합 된 디렉토리의 파일을 일부 (잠재적으로) 중첩 된 디렉토리로 복사하여 수신 파일이 일치하는 이름의 파일을 덮어 쓰는 것입니다.

중첩 된 루프의 O (n ^ 2) 성능은 정렬 및보다 효율적인 검색으로 개선 될 수 있습니다.

자신의 환경을 반영하도록 스크립트의 매개 변수를 편집해야합니다.

param(
    $pathToFiles = "$PSScriptRoot\BitTorrent\",
    $desiredPath = "$PSScriptRoot\DesiredPath\"
)

$itemlistA = Get-ChildItem -Path $pathToFiles | Select-Object -Property Name, FullName

$itemlistB = Get-ChildItem -Path $desiredPath -Recurse | Select-Object -Property Name, FullName

foreach ($fileA in $itemlistA) {
    foreach ($fileB in $itemListB) {
        if ($fileB.Name -eq $fileA.Name) {
            Copy-Item -path $fileA.FullName -Destination $fileB.FullName -Verbose
            break
        }
    }
}