1

我的问题非常类似于:

批量重命名基于zip文件的提取文件

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

ZIP 文件被清晰命名(Abba - Money Money Money.zip),但是 ZIP 文件的内容需要重命名(例如 FIK001ABBA_02_- ABBA -_MONEY_MONEY_MONEY.mp3)。

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

  • 提取文件
  • 将 zip 文件的内容重命名为 zip 文件名。
  • 例如:
  • FIK001ABBA_02_- ABBA -_MONEY_MONEY_MONEY.mp3
  • FIK001ABBA_02_- ABBA -_MONEY_MONEY_MONEY.cdg
  • 重命名为
  • 阿爸-钱钱钱.mp3
  • 阿爸-钱钱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
4

1 回答 1

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行。
  • WINZIP并且7ZIP是不同但相似的产品
  • 我使用的是相对较旧的版本WINZIP,它有一对可用的命令行实用程序 (WZZIPWZUNZIP),旨在批量使用
  • WZZIP我的版本(v3.2,build 8668)似乎有一个错误,如果将目录移动到 zip中,则-m(move) 选项会将delete目录。"dirname\*.*我会追查这个 - 但这就是为什么工作目录的 RD 被门控并与 MD 一起放置在:process例程中,而不是在主例程中。
于 2013-03-18T02:55:21.420 回答