파일 크기에 따라 파일 이름을 바꾸려고 합니다.

파일 크기에 따라 파일 이름을 바꾸려고 합니다.

다른 디렉토리에 있는 mp4 파일의 파일 크기를 기준으로 일부 MP4 파일의 이름을 바꾸려고 합니다. 동일한 크기의 모든 파일 이름을 동일한 이름으로 지정하고 싶습니다. 즉, 소스 파일의 파일 크기가 비교 디렉터리의 파일 크기와 일치하면 소스 파일의 이름은 비교된 파일의 이름으로 변경됩니다. 두 디렉토리를 모두 재귀적으로 읽어야 하기 때문에 DIR /s /b echo %%~zs>>filesizelist.txt 명령을 사용하여 2개 열에 있는 정보와 비교할 목록을 만드는 것이 더 쉬울 것이라고 생각합니다. 나 같은 목록

123456789 영화.mp4

987654321 영화2.mp4

그런 다음 모든 소스 mp4를 배치 파일에 전달하고 %%~za가 첫 번째 열의 값과 일치하면 파일을 해당 파일 이름으로 변환합니다. 이것이 최선의 길인가? 나는 즉시 작동하도록 스크립트를 작성하려고 시도했지만 그것은 전혀 실행되지 않았고 3일 동안 두통의 원인이었습니다(또한 참조 목록은 거의 변경되지 않으며 쉽게 업데이트됩니다). 누군가 스크립트 작성에 도움을 줄 수 있나요?

답변1

아래 Powershell 스크립트를 참조하세요.

나는 이것을 txt 파일에 대해서만 테스트했지만 파일 크기/길이를 읽을 수 있는 모든 파일에서 작동해야 합니다.

$Source = "C:\Test"
$Comparison = "C:\Test2"

$SourceFiles = Get-ChildItem -File -Path $Source | Select *
$ComparisonFiles = Get-ChildItem -File -Path $Comparison | Select *

Foreach ($File in $SourceFiles){
    Write-Host "Checking for" $File.Name
    Foreach ($CFile in $ComparisonFiles){
        if ($File.length -eq $CFile.length){
            Write-host $File.fullname "Matches `n" $CFile.fullname
            Rename-Item -Path $File.FullName -NewName $CFile.Name -WhatIf
            Write-Host "`n"
        }   
    }
}

$Source 및 $Comparison의 경로를 해당 디렉터리로 변경합니다. 현재 실행해도 안전하며 처음에는 변경되지 않습니다. 실행하고 결과에 만족하면 항목 이름 바꾸기 기능에서 "-Whatif"를 제거하면 처음 실행할 때 지정된 변경 사항이 적용됩니다.

이것은 매우 빠른 예이며 동일한 크기의 여러 파일(가능한 중복 파일 등)을 처리하는 방법을 고려하지 않습니다. 이는 상위 디렉터리만 수행하고 재귀적이지 않습니다.

관련 정보