zip 文件(文件名中有空格)解压并重命名文件,然后再压缩回去

zip 文件(文件名中有空格)解压并重命名文件,然后再压缩回去

我正在尝试重命名 zip 文件的内容,以便与批处理文件一起匹配 zip 文件的名称。

这正是我想做的:https://stackoverflow.com/questions/22853824/zip-file-to-unzip-and-rename-files-and-zip-back/25732864#25732864

这种方法有效,但前提是 zip 文件的文件名中没有空格。否则,它会创建一堆空文件夹,其中 zip 文件名中有空格。

Phil V 的答案很有效,但我认为它只需要稍微改进一下:

:: # Core Logic
:: # Looping through all the zips
for %%c in (*.zip) do (
    :: # Make a temporary folder with the same name as zip to house the zip content
    if not exist %%~nc md %%~nc
    :: # Extracting zip content into the temporary folder
    7z e -o%%~nc %%c
    if exist %%~nc (
        :: # Jump into the temporary folder
        pushd %%~nc
        if exist *.* (
            :: 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
            )
            :: # Zip all the files with the zip prefix with orginal zip name but with a number 2 (abc2.zip)
            if exist %%~nc.* (
                7z a -tzip %%~nc2 %%~nc.*
            )
            :: # Move the new zip back out of the tempory folder
            if exist %%~nc2.zip move %%~nc2.zip ..
        )
        :: # Jump out of the temporary folder
        popd
        :: # Showing you the directory listing
        dir
        :: # Showing you the content inside the new zip
        7z l %%~nc2.zip
        :: # Remove the temporary folder (Clean up)
        rd /s/q %%~nc
    )
)

更新:好的,在 webmarc 的帮助下它已经工作了(请参阅下面的解决方案)。

经过反复尝试,我最终找到了需要加引号的地方,以便按照我需要的方式工作。就像 webmarc 说的“在程序中可能包含嵌入空格的任何其他参数周围加上引号。”

答案1

别忘了,shell 不知道多个参数和带有空格的文件之间的区别。您可以使用引号来告诉 shell 单个参数中何时应该包含空格:

例如,ren %%i %%~nc.%%i更改为ren "%%i" "%%~nc.%%i"

并将程序中可能包含嵌入空格的任何其他参数放在引号中。

相关内容