批处理将ZIP文件的内容重命名为ZIP文件名

时间:2013-03-17 16:57:33

标签: batch-file zip rename

我的问题非常类似于:

Rename extracted file based on zip file in Batch

我有470个.zip文件,每个文件包含两个文件(.mp3& .cdg) - 它们是卡拉OK文件。

ZIP文件名称清晰(Abba - Money Money Money.zip),但ZIP文件的内容需要重命名(例如FIK001ABBA_02 _- ABBA -_ MONEY_MONEY_MONEY.mp3)。 / p>

所以,我希望批处理文件执行以下操作:

  • 提取文件
  • 将zip文件的内容重命名为zip文件名。
  • e.g:
  • FIK001ABBA_02 _- ABBA -_ MONEY_MONEY_MONEY.mp3
  • FIK001ABBA_02 _- ABBA -_ MONEY_MONEY_MONEY.cdg
  • 重命名为
  • Abba - Money Money Money.mp3
  • Abba - Money Money Money.cdg
  • 然后将文件添加回zip文件

我查看了上面的类似帖子,然而,它谈到解压缩* .7z我的文件是* .Zip。请解释: - )

以下是代码:

md textfiles
for %%f in (*.zip) do (
winzip -v "%%f"
move *.txt textfiles\%%~nf.txt
)
xcopy textfiles\*.txt originalfolder
rd textfiles /s /q

1 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL 
(SET workdir=.\textfiles)
IF EXIST "%workdir%\." ECHO Choose a directory name that doesn't exist&GOTO :EOF 
FOR %%f IN (*.zip) DO CALL :process %%f
GOTO :eof

::
::  
::
:process
MD "%workdir%"
wzunzip %1 "%workdir%" >nul
PUSHD "%workdir%"
FOR /f "tokens=1*delims=-" %%i IN ('dir /b /a-d') DO CALL :procren %%i %%j
POPD
:: Not sure whether you want to ADD (as you say) 
:: or REPLACE (seems more logical)
:: 
DEL %1
wzzip -m %1 "%workdir%\*.*" >nul
IF EXIST "%workdir%\." RD "%workdir%" /S /Q
GOTO :eof

:procren %%i %%j
SET filename=%1-%2
SET newname=%2
SET newname=%newname:_= %
SET newname=%newname:-= -%
REN %filename% "%newname%"
GOTO :eof

只是几点说明:

  • 我不确定您是否要添加或替换.ZIP文件的内容。代码将替换。如果您确实想要添加,请删除DEL %1行。
  • WINZIP7ZIP不同,但类似的产品
  • 我使用相对较旧版本的WINZIP,它有一对可用的命令行实用程序(WZZIPWZUNZIP),用于批量使用
  • 我的WZZIP版本(v3.2,版本8668)似乎存在错误,其中-m(移动)选项将delete目录"dirname\*.*被拉进了拉链。我会追逐这个 - 但这就是为什么工作目录的RD被门控并放在:process例程中的MD而不是主例程中。