업데이트 1

업데이트 1

Photorec을 사용하여 4TB HDD에서 약 300개의 MKV 파일을 복구했습니다. 이러한 파일은 첫 번째 섹터에 따라 이름이 지정됩니다(예: "f123456789.mkv"). 이제 "[63209875968-70209875967] f123456789.mkv"(이 예에서는 파일 크기가 7000000000바이트인 경우)와 같이 해당 시작 및 끝 오프셋 값을 추가하여 모두 이름을 바꾸고 싶습니다. 이 배치 스크립트를 사용해 보았습니다.

for %%F in (f*.mkv) do (
    SET name=%%~nF
    SET sectors=%name:~1%
    SET /a offset1=%sectors%*512
    SET /a offset2=%offset1%+%%~zF-1
    RENAME "%%F" "[%offset1%-%offset1%] %%F"
)

그러나 개별 명령은 CMD 내에서 작동하지만 작동하지 않습니다. 변수가 올바르게 확장되지 않았습니다. 나는 "setlocalenabledelayeexpansion"과 !variable을 사용해 보았습니다! %variable% 대신 아무 소용이 없습니다. 게다가 CMD의 계산은 32비트 정확도로 제한되어 있으므로 올바르게 계산하면 배치 명령 세트 /a를 사용하면 어쨌든 최대 4294967296까지만 오프셋을 계산할 수 있습니다(첫 번째 파일의 경우에도 충분하지 않음). . 이는 다른 스크립팅 언어를 사용해야 함을 의미하지만 어떤 언어가 적합하며 원하는 작업을 수행하는 데 해당 명령을 어떻게 빨리 찾을 수 있습니까? 나는 오후의 대부분을 PowerShell의 기본 사항을 익히고 위 스크립트를 적용하는 데 보냈지만 지금까지는 파일 이름을 인쇄하고 첫 번째 문자만 제거할 수 있었습니다... (동일한 양의 스크립트를 사용한다는 점을 고려하면 상당히 실망스럽습니다. 시간이 지나면 이 작업을 수동으로 수행할 수도 있었고 지금쯤 완료될 수도 있습니다. 하지만 오류가 발생하기 더 쉬우므로 자동화하고 싶은 또 다른 이유는 다음과 같습니다.

  • 파일 이름에서 얻은 첫 번째 섹터 번호로 변수를 설정하고,
  • 섹터 번호에 512를 곱한 첫 번째 오프셋 값에 대한 변수를 설정하고,
  • 첫 번째 오프셋에 파일 크기를 더한 값에서 1을 뺀 값인 마지막 오프셋 값에 대한 변수를 설정합니다.
  • 앞서 언급한 패턴을 사용하여 파일 이름을 바꿉니다.

어떤 아이디어? 감사해요 !


업데이트 1

그래서 또 다른 밤에 Powershell을 서투르게 만지작거린 후에 몇 가지 문제를 해결한 것 같습니다. 첫 번째 단계는 제대로 작동하는 것 같지만 실제로 파일 이름을 바꿀 때 해독할 수 없는 오류가 발생한 후 해독할 수 없는 오류가 발생합니다. 아래 Rename-Item 명령에 어떤 문제가 있습니까? 그리고 이를 보다 간단하고 우아하게 수행할 수 있는 방법이 있습니까?

foreach ($file in gci *.mkv) {
  $sectors = [string]($file.BaseName).substring(1)
  $offset1 = [int64]$sectors * 512
  $offset2 = [int64]$offset1 + [int64]($file.Length) - 1
  Rename-Item -NewName {"[$offset1-$offset2]" $file}
}

업데이트 2

마지막 줄을 다음과 같이 수정하여 이 문제를 해결했습니다.

Rename-Item $file -NewName ( "[$offset1-$offset2] " + $file.name )

답변1

귀하가 게시한 루프 는 라인 ForEach을 제외한 모든 목표를 달성한다는 점에서 올바른 것 같습니다 Rename-Item. 그것은해야한다:

Rename-Item $file -NewName $offset1"-"$offset2".mkv"

cmdlet 및 해당 구문에 대한 자세한 정보를 찾으려면 를 사용하세요 Get-Help Remove-Item -full. 유용한 예제와 함께 자세한 내용을 확인할 수 있습니다.

관련 정보