我正在尝试重命名 zip 文件的内容,以便与批处理文件一起匹配 zip 文件的名称。
这种方法有效,但前提是 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"
并将程序中可能包含嵌入空格的任何其他参数放在引号中。