2016-07-22 25 views
0

我使用的是7-zip的命令行版本,我可以用這個命令測試zip文件是否有效。如何測試一個Zip文件在windows批處理文件中是否有效

但我想創建一個批處理文件,它將循環通過目錄中的一堆壓縮文件,並且如果壓縮文件爲空,則執行一件事;如果壓縮文件中包含一些文件,則執行另一件事。

任何指針如何使用批處理文件做到這一點?

+0

如果我的理解如下建議立即進行刪除幫助答案。但首先請閱讀[this](http://stackoverflow.com/help/on-topic)。 – elzooilogico

+0

是的,請注意。抱歉。事實上,在我發佈我的問題之後,我確實認爲這不是我們做過的事情,所以我很抱歉。雖然你的答案真的非常友善,並且對達到我的目標有很大的幫助,但我很少去到那裏學習。我認爲我真的需要的是一些文檔甚至是創建這樣的批處理文件的教程,所以我可以爲自己學習。但是,無論如何感謝下面的內容。 – Simon

回答

0

這可能有助於

@echo off 

setlocal enabledelayedexpansion 

set "zipPath=C:\temporal\" 
set "zipProg=C:\Program Files (x86)\7-Zip\7z.exe" 

call:shortIt "%zipPath%", zipPath 
call:shortIt "%zipProg%", zipProg 

pushd %zipPath% 

for /F "tokens=*" %%a in ('dir /b "%zipPath%" ^| find ".zip"') do (
    set/a numFiles=0, isOk=0, size=0, compressed=0 
    for /F "tokens=*" %%i in ('%zipProg% t "%zipPath%%%a"') do (
    echo %%i | find /I "ok" >NUL && set/a isOK=1 
    echo %%i | find /I "files" >NUL && for /F "tokens=2 delims=:" %%n in ("%%i") do set/a numFiles=%%n 
    echo %%i | find /I "size" >NUL && for /F "tokens=2 delims=:" %%n in ("%%i") do set/a size=%%n 
    echo %%i | find /I "compressed" >NUL && for /F "tokens=2 delims=:" %%n in ("%%i") do set/a compressed=%%n 
) 
    if !isOk! neq 0 if !numFiles! equ 0 if !size! neq 0 set/a numFiles=1 

    if !isOk! equ 0 (
     echo(
     echo(%zipPath%%%a is not an archive or an error ocurred 
     echo(
) else (
    if !numFiles! neq 0 (
     echo(%zipPath%%%a contains !numFiles! files [!size! to !compressed!] 
    ) else (
     echo(%zipPath%%%a is empty 
    ) 
) 
) 


popd 
endlocal 

exit/B 0 

:shortIt 
SetLocal & set "token=%~s1" 
EndLocal & set "%2=%token%" 
相關問題