如何将zip文件中的所有图像提取到zip的名称目录?

时间:2018-05-15 12:30:45

标签: batch-file

我有大约300个zip文件,我想在zip存在的文件夹中提取他们的图像,其中一些有2或3张图片,然后将他们的名字更改为zip的名字,以zip的名字命名夹

  

在:

C:\zips\Myfile.Zip\word\media\image.Png
C:\zips\Myfile.Zip\word\media\image1.Png
C:\zips\hdh\Product.Zip\word\media\image.png
C:\zips\hdh\Product.Zip\word\media\image1.png
  

之后:

C:\zips\Myfile\myfile.Png
C:\Myfile\myfile1.png
C:\zips\hdh\Product\product.Png
C:\zips\hdh\Product\product1.png

我的代码以zip文件夹名称提取所有图像文件:

for /R %%I in ("*. Zip") do ( 7z e "%%~fI" "word/media/*" -o"%%~dpnI" )

我的批处理代码将所有图像的名称重命名为它们的方向,它只适用于只有一个图像的拉链,如果一个zip文件有多个图片,它只是更改图像文件而不是其他图像,我想将其他图像更改为"文件夹的名称" 1.png和....:

For /r %%F in (*.jpeg) do @for %%A in ("%%F\°°") do ren "%%F" "%%~nxA.jpeg"

For /r %%F in (*.png) do @for %%A in ("%%F\°°") do ren "%%F" "%%~nxA.png"

1 个答案:

答案 0 :(得分:0)

在与此脚本相同的目录中下载zipjs.bat

:::::::::::

@echo off

set "zipDir=C:\zips\"
set "inZipPath=\word\media\"
set "picFormats=bmp png jpg gif tiff bpm"

break>"pic.list"
for %%a in ("%zipDir%\*.zip") do (

    rem echo %%a
    (call zipjs.bat list -source "%%~fa" -flat yes | find /i "%inZipPath%" | findstr /i /e "%picFormats%")>>"pic.list"
)

setlocal enableDelayedExpansion

    set "prevZN="
    set "counter=1"
    for /f "usebackq tokens=* delims=" %%f in ("pic.list") do (
        set "full_path=%%f"
        set "tfp=!full_path:\word\media\=?!" 
        for /f "tokens=1,2 delims=?" %%a in ("!tfp!") do (
            echo %%a ### %%b
            for %%# in ("%%a") do set "zipname=%%~n#"
            for %%# in ("%%a") do set "zipdir=%%~dp#"
            for %%# in ("%%b") do set "filename=%%~b"
            for %%# in ("%%b") do set "fileext=%%~xb"
        )

        if "!zipname!" NEQ "!prevZN!" (
            set counter=1
            set prevZN=!zipname!
        ) else (
            set /a counter=counter+1
        )
        call zipjs.bat unZipItem -source "!full_path!" -destination "!zipdir!\temp" -keep yes -force yes
        ren "!zipdir!\temp\!filename!" "!zipname!!counter!!fileext!"
        move "!zipdir!\temp\!zipname!!counter!!fileext!" "!zipdir!"
    )

endlocal