2008-10-07 104 views
3

我正在構建系統。構建系統將結果作爲zip文件發佈到目錄中。不幸的是,我沒有簡單的方法知道壓縮文件的名稱,因爲它有時間戳。對於下一個操作,我必須將此zip文件解壓縮到某個特定位置,然後再執行一些文件操作。如何在BAT文件的目錄中解壓縮最新的文件?

我想我可以改變構建系統,所以我從命令行指定結果壓縮文件的名稱,但是,我雖然它可能是最簡單的只是找出哪一個是最新的文件並解壓縮它(如果前面的過程是成功的)。

如何才能發出僅對目錄中最新的zip文件生效的unzip命令,忽略所有其他命令?

編輯:我決定改用ANT的功能來完成這個任務。然而,它仍然是一個巧妙的竅門... ...謝謝你的答案!

回答

10

這應做到:

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僅針對第一個文件運行。您需要&&(和)和||(或)以防因某種原因解壓縮失敗。

無論您想要使用哪種解壓縮命令,您都需要更改UNZIP %%i

編輯 只要Zip文件名不包含任何空格,上述操作將會生效。如果你想用空格來處理文件名,請使用以下的變體:

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

的區別是:

  • 的「令牌= *」選項返回整個文件名的,即使它包含空格。

  • 傳遞給解壓縮文件名是引用

  • 該變種使用單引號DIR命令所以不需要「有usebackq」選項。

-2

爲什麼在使用powershell或控制檯應用程序時使用bat文件?

-1

我認爲你需要7-zip才能腳本壓縮/解壓縮。

2

如果Cygwin的或其他類似Unix的環境是一種替代

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

會做

+0

您也可以下載http://unxutils.sourceforge.net/並將其添加到您的讓你從命令提示符使用許多標準的Unix實用程序的路徑 - 我的Windows機器上必須有這樣的設備,以防萬一我忘記了dir與ls,cat與type等等。很高興有grep,awk和也是如此。 – Randy 2008-10-07 15:38:40

相關問題