如何测试Zip文件在Windows批处理文件中是否有效

时间:2016-07-22 10:00:04

标签: windows batch-file 7zip

我正在使用7-zip的命令行版本,我可以使用它来测试zip文件是否有效使用t命令。

但是我试图创建一个批处理文件,它会遍历一个目录中的一堆zip文件,如果zip是空的则做一件事,如果zip中有一些文件存档,则另一件事。

有关如何使用批处理文件执行此操作的任何指示?

1 个答案:

答案 0 :(得分: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%"