아카이브 이름에 따라 추출된 파일을 자동으로 추출하고 이름을 바꿉니다.

아카이브 이름에 따라 추출된 파일을 자동으로 추출하고 이름을 바꿉니다.

폴더에 zip 파일이 많이 있습니다. 각 zip 파일에는 exp_1.txt. 각 zip 파일의 압축을 풀고 각 zip 파일에서 추출된 파일의 이름을 zip 파일 이름으로 바꾸고 싶습니다.

zip 파일 이름은 패턴이나 날짜 구조를 따르지 않지만 모두 다릅니다. zip 파일과 동일한 디렉터리에 파일을 추출 하는 방법을 알아냈지만 추출된 zip 파일의 이름과 일치하도록 exp_1.txt이름을 바꾸는 방법을 알 수 없습니다 .exp_1.txt

더 짧은 단어로 다시 한 번: 에서 유일한 TuesdayReport.zip파일을 추출 exp_1.txt하고 .TuesdayReport.txtTuesdayReport.zip

현재 저는 7z xzip 파일이 있는 동일한 디렉터리에 파일을 추출하는 데 사용하고 있습니다. 배치 파일에서 이 작업을 실행할 수 있기를 바랍니다.

답변1

다음에서 다운로드할 수 있는 7zip 명령줄 에디션을 사용하면 어떨까요?여기?

이 zip 파일 내에서 배치 프로세스 중에 도움이 될 수 있는 모든 스위치와 명령이 포함된 CHm 형식의 도움말 파일을 찾을 수 있습니다.

답변2

forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"

답변3

exp_1.txt그러면 현재 디렉터리의 모든 zip 파일에서 이름이 zip 파일과 동일하지만 확장명 txt이 아닌 파일이 추출됩니다 zip.

for %a in (*.zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"

이는 명령줄에서 직접 실행해야 하며 일괄 처리에서 실행하려면 두 배로 늘려야 합니다.%

기능:

  • for루프는 모든 zip 파일을 열거합니다.
  • 첫 번째 7z호출을 통해 findstr추출이 실행되는지 확인하고 아카이브에 특정 파일이 포함된 경우에만 파일이 생성됩니다.
  • 두 번째 7z호출은 실제로 파일을 표준 출력( -so스위치)으로 추출하고 stdout을 archive와 동일한 이름의 파일(확장자 빼기)로 리디렉션합니다. 수정 자는 %~ncmd에 기본 이름(확장자 없음)만 사용하도록 지시합니다.

동일한 이름을 가진 파일이 두 개 이상 아카이브에 있는 경우(다른 디렉터리에) 예기치 않은 결과가 발생할 수 있습니다.

배치로 넣는 경우 파일 이름을 변수로 설정하는 것이 좋습니다(루프 전에) 반복 관련 오류를 피하기 위해 (위 명령에서 3번 입력해야 합니다).

관련 정보