1

私の質問は次のように非常に似ています:

バッチのzipファイルに基づいて抽出されたファイルの名前を変更します

それぞれ 2 つのファイル (.mp3 と .cdg) を含む 470 の .zip ファイルがあります。これらはカラオケ ファイルです。

ZIP ファイルにはわかりやすい名前 (Abba - Money Money Money.zip) が付けられていますが、ZIP ファイルの内容は名前を変更する必要があります (例: FIK001ABBA_02_- ABBA -_MONEY_MONEY_MONEY.mp3)。

したがって、バッチファイルで次のことを行いたいと思います。

  • ファイルを抽出する
  • zip ファイルの内容の名前を zip ファイル名に変更します。
  • 例えば:
  • FIK001ABBA_02_-アバ-_MONEY_MONEY_MONEY.mp3
  • FIK001ABBA_02_- ABBA -_MONEY_MONEY_MONEY.cdg
  • に改名
  • Abba - マネー・マネー・マネー.mp3
  • Abba - マネー マネー 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行を削除してください。
  • WINZIP7ZIPは異なりますが、同様の製品
  • 私は比較的古いバージョンの を使用しています。このバージョンには、バッチ使用を目的としたWINZIPコマンドライン ユーティリティのペア (WZZIPおよび) が用意されています。WZUNZIP
  • 私のWZZIPバージョン (v3.2、ビルド 8668) には、zip に MOVED されている場合に-m(move) オプションがdeleteディレクトリになるというバグがあるようです。"dirname\*.*私はこれを追跡します-しかし、それが作業ディレクトリのRDがゲートさ:processれ、メインルーチンではなくルーチン内にMDとともに配置される理由です。
于 2013-03-18T02:55:21.420 に答える