배치 파일을 사용하여 파일을 개별 zip 파일로 압축


10

그래서 배치 파일에서 7zip을 사용하여 폴더의 파일을 가져 와서 개별 파일로 압축하려고합니다. 따라서 첫 번째 파일은 자체 zip 아카이브와 다음 파일 등을 가져옵니다. 나는 인터넷을보고 있었고 다른 코드를 시도했다. 지금까지 파일을 하나의 zip 파일로 압축하고 데스크탑으로 출력했습니다.

불행히도 나는 그렇게 한 코드를 잃어 버렸고 이제는 아무것도하지 않는 것처럼 보입니다.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

각 파일에 자체 zip 아카이브가 있고 zip 아카이브가 파일 이름을 빼고 확장명을 빼고 싶습니다.

도움을 주시면 감사하겠습니다.


또한 Windows 10의 내장 zip 기능을 사용하여 더 쉬운 방법이 있다면 괜찮을 것입니다.
Mike Van Dunk

답변:


4

각 파일에 자체 zip 아카이브가 있고 zip 아카이브가 파일 이름을 빼고 확장명을 빼고 싶습니다.

배치 스크립트

(소스 및 대상 전체 명시 적 폴더 경로를 맨 위에 설정 한 다음 필요에 따라 실행하십시오. 소스는 압축하려는 파일이있는 위치이고 압축하려는 위치는 대상입니다.)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

커맨드 라인

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

추가 자료


4

원본 스크립트는 다음을 한 줄씩 수행합니다.

@echo on

명령 프롬프트에서 배치 파일의 각 명령을 실행하기 전에 다시 인쇄하도록 지시합니다. 이 작업은 실제로 수행하기 전에 수행중인 작업을 "볼 수"있습니다.

cd "C:\Users\MVD21\Desktop\test"

C의 hanges는 D 난 당신이 모든 파일을 압축 할 경로입니다 무슨 희망으로 irectory.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

IN여기에 대한 매개 변수 는 (C:\Users\MVD21\Desktop\test)입니다. 이 루프의 원인이됩니다 "몸"(키워드 뒤의 조치가 DO) 실행하세요 회만 으로, %i값을 할당 매개 변수 C:\Users\MVD21\Desktop\test. 이것이 당신이 원하는 것을하지 않는 것은 놀라운 일이 아닙니다! 이것이 전체 디렉토리를 단일 .7z 파일로 압축하는 것처럼 보입니다.

아무 것도 하지 않으면 의 경로를 찾을 수 없기 때문일 수 있습니다 7z.exe. 해당 파일이 현재 디렉토리 ( test위에서 언급 한 디렉토리)에 없으면 환경 변수 에 있어야합니다 PATH( 쉘에서 %PATH%시도 echo %PATH%하여 현재 설정되어있는 것을보십시오). 그렇지 않으면 7z.exe현재 디렉토리 로 복사 하거나 디렉토리의 절대 경로를 지정해야합니다 (예 :) "C:\Program Files\7-zip\7z.exe" ....

pause

스크립트가 완료되면이 키워드는 셸에서 즉시 프롬프트를 종료하지 않고 Enter 키를 누르거나 명령 프롬프트를 닫을 때까지 기다립니다.


배치 스크립트 (또는 실제로 코드를 다루는 다른 것)를 작성할 때 전체 스크립트를 이해하지 못하는 모 놀리 식 복사 붙여 넣기로 처리하지 말고 대신 개별 부분을 파악한 다음 서로 연결할 수있는 하위 부분에 문제가 있습니다. 이를 통해 문제를 독립적으로 해결 하고 다른 사람에게 귀하의 모든 작업을 요구하지 않고 솔루션을 만들 수 있습니다. 나는 그것을 강력히 추천합니다.

귀하의 경우 문제의 다음과 같은 하위 구성 요소가 있습니다.

  1. 주어진 디렉토리에 포함 된 각 파일을 반복 (루프 스루)합니다.
  2. 주어진 각 파일에 대해 7z유틸리티 를 호출하여 .7z 파일에 넣습니다 .

특정 요구를 해결하는 답변이 이미있을 가능성은 더 일반적인 부분을 개별적으로 찾을 수있는 가능성보다 적습니다.

이 질문은 '배치 스크립트에서 디렉토리의 각 파일에 무언가를 수행하는 방법'은 문제의 절반을 해결합니다.

대답의 추력은 StackOverflow 답변 에서이 부분으로 시작한다는 것입니다.

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

그리고 그것의 부분 변경 뭔가 일을 합니다 ( echo %%f무엇을 할) 당신이 원하는을 . 스크립트 의 텍스트 를 분석하고 각 문자와 매개 변수의 의미를 이해 했기 때문에 해당 부분을 변경해야한다는 것을 알고 있으므로 내 코드를 삽입하려는 위치를 추론 할 수 있습니다.

다음은 "공기 코드"입니다 (추천되지 않음).

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

위 의 @echo onpause문은 모범 사례이므로 그대로 둘 수 있습니다. cd파일이 해당 경로에있는 경우 해당 문도 유지하려고 할 수 있습니다.

그래서 우리는 무엇을 떠납니 까?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

"작동하지 않습니다!"라고 응답하면 도움이되지 않습니다. 당신이 시도하고 작동하지 않는 경우, 당신 의견에 다음 정보를 알려 주어야 합니다 :

  • 이러한 명령을 실행하거나 배치 파일에 넣고 실행할 때 명령 프롬프트에 어떤 정확한 오류 메시지가 표시됩니까? 축약하지 마십시오. 출력을 직접 복사하여 붙여 넣습니다 ( 많은 경우 http://pastebin.com 에 출력 ).
  • 당신은 무엇을 생각하는 오류 메시지가 문제가 있음을 말하고있다?
  • 7-zip 설치 위치 (파일 경로)는 어디에 있습니까?
  • 7-zip 설치의 파일 위치가 PATH환경 변수 의 내용에 포함되어 있습니까? (위에서 언급 한대로 프롬프트 echo %PATH%에서 이를 확인하십시오 cmd.)

다른 드라이브에 7zip이 설치되어 있기 때문에 이것이 작동하지 않는다고 생각합니까? 원래 답변에서와 같이 "위치 7zip"을 cd하면 작동하는 것 같습니다. 물론 그것은 "때때로"만 작동합니다. 그 아래에 다른 에코 문을 넣을 때까지 작동했지만 지금은 그렇지 않습니다. 그리고 예 배치 파일에 대해 더 많이 이해하려고합니다. 나는 배치 명령의 용어집이나 연구하지 말아야 할 것을 찾기 위해 노력해 왔으므로 실제로 이해합니다. 나를 이해하고 작동시키는 것보다 작동하도록하십시오.
Mike Van Dunk

솔루션을 시도했지만 배치 파일이 전혀 실행되지 않기 때문에 출력이 무엇인지 말할 수 없습니다. cmd 창이 깜박 거리면서 잠시 연 다음 다시 닫힙니다. 예, 거기에 일시 정지가 있습니다. 로컬 드라이브와 보조 내장 드라이브 모두에 ​​7zip을 설치했지만 경로 환경에 포함되지 않는 것 같습니다.
Mike Van Dunk

정말로 이해하고 싶지만 Google 검색은별로 도움이되지 않습니다. 예를 들어, " 'dir / b"명령 또는 매개 변수가 무엇인지 또는 무엇을하는지 모르겠습니다. 나는 dir이 분명히 디렉토리라는 것을 알고 있지만 / b가 무엇인지 모른다. 내가 원하는 것은 누군가가 매개 변수가하는 일을 설명하여 더 잘 이해할 수 있도록하는 것입니다. 또는 누군가가 이런 종류의 일을하는 사이트에 대한 링크가 있다면 도움이 될 것입니다. 배치 파일에서 'dir / b'를 봤는데 실제로 아무것도 찾을 수 없었습니다. 나는 생각 은 / B 파일 이름이 뭔가 않는있다 그러나 나는 확신입니다.
Mike Van Dunk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.