控制台命令只从存档中提取单个文件? (7Z)

时间:2016-02-28 10:50:12

标签: windows scripting 7zip

我有一个脚本可以将文件夹中的所有档案提取到包含档案名称的文件夹中,我想修改它以便它只从每个档案中提取一个文件(无关紧要),它会表现得好像有一个计数器将计算1个文件并移动到下一个存档。

例如,假设我们在文件夹中有以下文件,每个档案都包含大括号中的内容:

a.7z {folder{1.txt, 2.txt, 3.txt}}
b.7z {folder2{4.txt, 5.txt, 6.txt}}
c.7z {7.txt}

因此,运行脚本将导致提取以下内容(这些是文件夹):

a{folder{1.txt}}
b{folder2{4.txt}}
c{7.txt}

这可能吗?

这是我目前的脚本:

PATH %PATH%;"C:\Program Files\7-Zip";
7z x *.* -o*

1 个答案:

答案 0 :(得分:1)

您可以使用

列出档案文件
7z l a.7z

如果所有文件都以txt结尾,则可以使用

7z l a.7z | find "txt"

使用此答案获取第一行: Windows batch command(s) to read first line from text file

然后使用此答案从该行获取文件名(最后一个字)并将其保存在批处理变量 FILE_NAME 中:https://superuser.com/questions/667494/batch-to-extract-a-word-from-a-string-inside-a-text-file

然后使用以下命令解压缩文件:

7z e -i!%FILE_NAME% a.7z -o*

您可以使用此示例迭代所有* .7z文件 Iterate all files in a directory using a 'for' loop

for /r %%i in (*.7z) do echo %%i

所有部分在一起:

@echo off

for  %%i in (*.7z) do call :extract_file %%i

:extract_file
"c:\Program Files\7-Zip\7z.exe" l %1 > temp.txt
for /f "skip=15 tokens=1-10" %%a in (temp.txt) do (
  echo %%f
  "c:\Program Files\7-Zip\7z.exe" e -i!%%f %1 -o*
  goto :end
)
:end
EXIT /B 0

:eof