批处理文件将文件内容解压缩到文件夹,并使用zip文件名重命名/前缀内容

时间:2014-09-12 10:10:29

标签: batch-file for-loop zip rename

我经常通过ftp收到多个.zip文件。

我将每个.zip文件分别解压缩到名为.zip文件名的文件夹中,并使用原始.zip文件的名称重命名该文件夹中的每个文件。

示例:

如果我收到一个名为" 10 smith street windsor.zip"的.zip文件。包含文件" permit application.doc"," architectural drawings.doc",我将.zip的内容解压缩到一个名为" 10 smith street windsor&#的新文件夹34;并使用文件夹的名称为每个文件添加前缀,即" 10 smith street windsor - permit application.doc"," 10 smith street windsor - architectural drawings.doc"。

我想使用批处理文件自动执行此手动过程,该文件创建为每个.zip文件命名的文件夹,将.zip文件的内容复制到该文件夹​​,然后重命名文件夹中的每个文件,名称为原始的.zip文件。

我的偏好是使用7zip(7za)的命令行版本。

我修改了我在网上找到的现有脚本(见下文),但它仅适用于没有空格的文件夹名称。例如,下面的脚本为.zip文件创建一个文件夹" 10_smith_street_windsor.zip"并成功地重命名/前缀文件夹/ zip内容,但在带有空格的.zip文件上失败" 10 smith street windsor.zip"

rem loop through all the zips
for %%c in (*.zip) do (`enter code here`
    rem make a temporary folder with the same name as zip to house the zip content
    if not exist %%~nc md %%~nc
    rem extract zip content into the temporary folder
    7za e -o"%%~nc" %%c
    if exist "%%~nc" (
        rem jump into the temporary folder
        pushd "%%~nc"
        if exist *.* (
            rem loop through all the files found in the temporary folder and prefix it with the zip's name
            for %%i in (*.*) do (
                ren "%%i" "%%~nc.%%i"
            )
         )
        rem jump out of the temporary folder
        popd
    )
)

请爱任何帮助: - )

此致

乔治

1 个答案:

答案 0 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    for %%z in (*.zip) do (
        if not exist "%%~nz" md "%%~nz"
        7za e -o"%%~nz" "%%~fz"
        for %%f in ("%%~nz\*") do ren "%%~ff" "%%~nz - %%~nxf"
    )

对于每个zip文件,如果不存在具有相同名称的文件夹,请创建它。将zip文件解压缩到新文件夹中。对于文件夹中的每个文件,将文件重命名为zip的名称,后跟文件的原始名称。