BAT 파일의 디렉토리에서 최신 파일을 어떻게 압축 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/178936

  •  05-07-2019
  •  | 
  •  

문제

나는 빌드 시스템을 연구하고 있습니다. 빌드 시스템은 결과를 디렉토리에 zip 파일로 게시합니다. 불행히도 zip 파일의 이름을 알 수있는 쉬운 방법은 없습니다. 다음 작업을 위해서는이 ZIP 파일을 특정 위치로 압축하고 더 많은 파일 작업을 수행해야합니다.

빌드 시스템을 변경할 수 있도록 명령 줄에서 결과 zip 파일의 이름을 지정할 수 있지만 가장 최신 파일인지 확인하는 것이 가장 쉬운 일이지만 (이전 프로세스가있는 경우 이전 프로세스가있는 경우. 성공적인).

디렉토리의 최신 zip 파일에만 적용되는 zip 명령을 어떻게 발행 할 수 있습니까?

편집 : 대신이 작업에 ANT의 기능을 사용하기로 결정했습니다. 그러나 소매를 가리기 위해 여전히 깔끔한 트릭입니다 ... 답변 주셔서 감사합니다!

도움이 되었습니까?

해결책

이렇게해야합니다.

FOR /F usebackq %%i IN (`DIR /B /O-D *.ZIP`) DO UNZIP %%i && GOTO DONE || GOTO DONE
:DONE

이것은 다음과 같이 작동합니다.

  • DIR /B /O-D *.ZIP 모든 zip 파일을 역 날짜 순서로 "베어" - 즉 이름 만 - 형식으로 나열합니다.
  • FOR /F usebackq 명령의 출력을 루프하는 데 사용됩니다.
  • && GOTO DONE || GOTO DONE 확인하십시오 UNZIP 첫 번째 파일에 대해서만 실행됩니다. 둘 다 필요합니다 && (그리고) 그리고 || (또는) zip이 어떤 이유로 실패하는 경우.

변경해야합니다 UNZIP %%i 사용하려는 열쇠 명령의 경우.

편집하다Zip Filename에 공백이 포함되어 있지 않은 한 위의 내용은 작동합니다. 공백으로 파일 이름을 처리하려면 다음 변형을 사용하십시오.

FOR /F "tokens=*" %%i IN ('DIR /B /O-D *.ZIP') DO UNZIP "%%i" && GOTO DONE || GOTO DONE
:DONE

차이점은 다음과 같습니다.

  • "Tokens =*"옵션은 공백이 포함되어 있어도 파일 이름 전체를 반환합니다.

  • 압축에 전달 된 파일 이름이 인용됩니다

  • 이 변형은 DIR 명령에 단일 따옴표를 사용하므로 "asudackq"옵션이 필요하지 않습니다.

다른 팁

Cygwin 또는 다른 Unix와 같은 환경이 대안 인 경우

unzip "$(ls -tr *zip | tail -n1)"

할 것입니다

압축/압축을 스크립트하려면 7- zip이 필요하다고 생각합니다.

PowerShell 또는 콘솔 애플리케이션이있을 때 BAT 파일을 사용하는 이유는 무엇입니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top