批处理文件从Zip文件夹中提取特定文件并重命名为包含Zip名称

时间:2013-11-28 05:00:44

标签: windows batch-file zip extract rename

我有大约300个zip文件,这些文件都包含一个名为SP_OUT.db的文件,其中包含zip中的一个文件夹。这些文件夹本身可能会也可能不会被压缩。 我想解压缩文件SP_OUT.db并放在一个新文件夹中。但是,因为所有文件都是相同的名称,我想重命名它们以包含它来自的ZIP的名称。

例如

A11_21156_AHDW1_1.zip提取SP_OUT.db并将其重命名为A11_21156_AHDW1_1SP_OUT.db A06_21047_APERCLASH1_1.zip提取SP_OUT.db并将其重命名为A06_21047_APERCLASH1_1.db

任何帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:3)

您使用的操作系统是什么? 如果你不介意安装程序7zip,看起来应该有办法做到这一点。 然后,您可以使用如下所示的7zip命令来仅提取SP_OUT.db文件。

7z e archive.zip -oc:\soft SP_OUT.db -r

将所有SP_OUT.db文件从archive archive.zip中提取到c:\ soft文件夹

可能需要尝试使用x参数而不是e

来源:http://sevenzip.sourceforge.jp/chm/cmdline/commands/extract.htm

编辑:制作出一个脚本来提取每个文件。 但是,我还没有找到如何将原始zip名称添加到提取的SP_OUT.db文件名的开头。

我已在下面的脚本中标记了您需要执行此操作的位置,并在其后添加了“REN”(重命名)以更改提取文件的名称。

@ECHO off
TITLE All your SP_OUT.db are belong to us
SETLOCAL ENABLEDELAYEDEXPANSION

REM Set your working directories below.
set targetFile=SP_OUT.db
set sourceDir=%CD%\source
set outputDir=%CD%\output
set 7ziplocation=C:\Progra~1\7zip\7z.exe

:start
FOR /f "delims=" %%a IN ('dir/s/b/a-d "%sourcedir%\*.zip"') DO (
 %7ziplocation% e %%a -o%outputDir% SP_OUT.db -r
 CALL :process2 %%a
  )
GOTO :eof

:process2
SET "fdir=%1"
REM ********* %fdir% will be the full path including filename of original zip file.
REM ********* Work out how to get just zip file name and put save to variable here.
REN %outputDir%\SP_OUT.db %put_the_above_zip_name_here%_SP_OUT.db
GOTO :eof

答案 1 :(得分:-2)

只需阅读手册页:


7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

Usage: 7z  [...]  [...]
       []


  a: Add files to archive
  b: Benchmark
  d: Delete files from archive
  e: Extract files from archive (without using directory names)
  l: List contents of archive
  t: Test integrity of archive
  u: Update files to archive
  x: eXtract files with full paths

  -ai[r[-|0]]{@listfile|!wildcard}: Include archives
  -ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
  -bd: Disable percentage indicator
  -i[r[-|0]]{@listfile|!wildcard}: Include filenames
  -m{Parameters}: set compression Method
  -o{Directory}: set Output directory
  -p{Password}: set Password
  -r[-|0]: Recurse subdirectories
  -scs{UTF-8 | WIN | DOS}: set charset for list files
  -sfx[{name}]: Create SFX archive
  -si[{name}]: read data from stdin
  -slt: show technical information for l (List) command
  -so: write data to stdout
  -ssc[-]: set sensitive case mode
  -ssw: compress shared files
  -t{Type}: Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
  -v{Size}[b|k|m|g]: Create volumes
  -w[{path}]: assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
  -y: assume Yes on all queries