“静默地”提取7-Zip文件 - 命令行选项

时间:2010-09-22 23:09:57

标签: 7zip

我想在Python脚本中提取7-Zip存档。它工作正常,只是它吐出提取细节(在我的情况下这是巨大的)。

有没有办法在提取时避免这些冗长的信息?我没有找到7z.exe的任何“静默”命令行选项。

我的命令是

7z.exe -o some_dir x some_archive.7z

14 个答案:

答案 0 :(得分:34)

我在寻找相同的时候遇到过这个,但我自己解决了!假设使用Windows / DOS处理命令,更简单的解决方案是将命令更改为:

7z.exe -o some_dir x some_archive.7z > nul

即,将输出定向到空文件而不是屏幕。

或者您可以将输出传递给DOS“find”命令以仅输出特定数据,即

7z.exe -o some_dir x some_archive.7z | FIND "ing archive"

这只会产生以下输出。

  

创建存档some_archive.7z

  

更新存档some_archive.7z **


我的最终解决方案是将命令更改为

... some_archive.7z | FIND /V "ing  "

在'ing'之后注意双倍空格。这导致以下输出。

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

Scanning

Updating some_archive.7z


Everything is Ok

这将删除单个文件处理,但会生成整个操作的摘要,而不管操作类型如何。

答案 1 :(得分:10)

一种可能性是使用popen生成子进程,因此其输出将返回到要处理/显示的父进程(如果需要),否则完全被忽略(创建popen对象使用stdout=PIPEstderr=PIPE来检索子项的输出。

答案 2 :(得分:6)

就像他们说的那样,隐藏大部分可以使用的屏幕填充消息...... some_archive.7z | FIND / V“压缩”但“FIND”也会删除包含该词的错误消息。你不会被警告。由于更新的7-zip版本,“FIND”也可能不得不改变。

7-zip有强制详细输出,没有静音模式,混合stderr和stdout(*),不保存Unix权限等。这些反标准行为一起把“7-zip”放在一个不好的地方例如,比较“tar + bzip2”或“zip”。

(*)“上游(Igor Pavlov)不希望为消息做出不同的输出,即使他多次被要求这样做:(”http://us.generation-nt.com/answer/bug-346463-p7zip-stdout-stderr-help-166693561.html - “Igor Pavlov不想改变这个行为“http://sourceforge.net/tracker/?func=detail&aid=1075294&group_id=111810&atid=660493

答案 3 :(得分:3)

7zip没有明确的“安静”或“静默”模式用于命令行提取。

一种可能性是使用popen生成子进程,因此它的输出将返回到父进行处理/显示(如果需要)或者完全忽略(用stdout = PIPE和stderr = PIPE创建你的popen对象)能够从孩子那里检索输出。)

否则尝试这样做:

%COMSPEC% /c "%ProgramFiles%\7-Zip\7z.exe" ...

答案 4 :(得分:3)

扩展@Matthew的答案和答案https://superuser.com/questions/194659/how-to-disable-the-output-of-7-zip  我正在使用FINDSTR而不是find,所以我可以链接多行来排除和空行:

7za.exe a test1.zip .\foldertozip | FINDSTR /V /R /C:"^Compressing  " /C:"Igor Pavlov" /C:"^Scanning$" /C:"^$" /C:"^Everything is Ok$"
  • / V:排除
  • / R:regex
  • / C:“^压缩”:开始行,压缩,2个空格
  • / C:“^ Scanning $”:单词“扫描”(开始/结束)
  • / C:“^ $”:开头和结尾之间没有任何东西,即空行

我正在使用/ C以便空格是一个空格,否则它就是多个单词之间的分隔符,可以在这个更简单的版本中排除:

FINDSTR /V "Compressing Pavlov Scanning Everytyhing"

(存在同样的警告,如果新版本中的措辞发生变化,或者如果有用的行以“压缩”一词开头,它将无法按预期工作)。

答案 5 :(得分:2)

| FIND是一个很好的选择,可以显示发生的事情而不会显示无关紧要的文字。

答案 6 :(得分:0)

如果你从Powershell运行7-zip.exe,而你只想查看错误,那么你可以尝试这样的事情:

7-zip.exe u <Target> <Source> | Select-String "Error" -Context 10

这只会显示&#34;错误&#34;消息行和周围的10行(或任何数字)来捕获错误特定的输出。

答案 7 :(得分:0)

7-zip没有这样的选项。另外,压缩后的每个文件上打印的行应该显示在同一位置,而无需换行,这会擦除前一个行,这很酷。不幸的是,在某些情况下(詹金斯...),它产生了几行lines️淹没了控制台。

NUL(Windows)可能是一种解决方案。

7-zip.exe -o some_dir x some_archive.7z>NUL

答案 8 :(得分:0)

检查7zip源,我发现隐藏的-ba开关似乎可以解决问题。不幸的是,它还没有完成。我设法对源进行了一些修改,但它只是一个hack。如果有人感兴趣,则将选项变量称为options.EnableHeaders,并且需要在CPP/7zip/UI/Console/Main.cpp文件中进行更改。 或者,您可以戳7Zip的作者来完成tracker中的功能。对此有几个请求,其中一个是here

答案 9 :(得分:0)

仅显示最后4行...

7z x -y some_archive.7z | tail -4

给我:

Everything is Ok

Size:       917519
Compressed: 171589

-y开关将对所有内容回答“是”(在我的情况下为覆盖现有文件)。

答案 10 :(得分:0)

在类似Unix的操作系统(Linux,BSD等)上,shell命令7z ... >/dev/null会将7z写入的所有文本丢弃到标准输出。这应该涵盖7z编写的所有状态/信息消息。

似乎7z会将错误消息写入标准错误,因此,如果您执行>/dev/null,错误消息仍会显示。

答案 11 :(得分:0)

正如上面Fr0sT所述,-ba开关仅输出有效的内容(至少在我尝试的列表选项中)。 7z.exe l archive_name.zip

7z.exe l -ba archive_name.zip

有很大的不同,尤其是用于解析脚本中的输出。 无需修改任何内容,只需在version19中使用-ba开关即可。上面也有人告诉过这个。我把我无法发表的评论作为答案。

答案 12 :(得分:-1)

您可以使用-y开关停止7-Zip显示提示。这将对所有提示回答“是”。只有在您有信心时才使用此功能。

答案 13 :(得分:-1)

在十六进制编辑器中找到版权并将其值替换为0000 https://imgur.com/a/ZJswkyq

相关问题