如何在变量中(或在文本文件中)为命令行 7-zip 编写错误状态

sle*_*ira 5 batch command-line 7-zip

我使用 7-zip(在我的批处理文件中)打包一些目录并通过电子邮件发送存档。当我在运行批处理文件的同时使用此目录中的某个文件时(我使用 Task Scheduler 启动批处理文件),我看到正在处理的警告消息。在此之后,当存档准备好时,7-zip 会在发送电子邮件之前显示如下消息:“警告:无法打开 29 个文件”。发生这种情况时,我希望能够设置一个%MESSAGE%值为“29 个警告正在进行中”的环境变量(类似于),并将此消息放在电子邮件的主题中。但是现在所能做的就是使用%ERRORLEVEL%变量。如果我无法设置%MESSAGE%变量,是否可以将警告消息写入文件,然后解析该文件以提取最后一行?

Kar*_*ran 7

我建议您使用7-Zip 命令行版本(7za.exe)。

像下面这样的命令会将所有输出(包括来自 stderr)重定向到Log.txt

7za a Test.7z *.* >Log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

此外,7-Zip 返回以下退出代码,您可以在带有 %ERRORLEVEL% 的批处理文件中使用这些代码:

0 = 没有错误。

1 = 警告(非致命错误)。例如,一个或多个文件被某个其他应用程序锁定,因此它们没有被压缩。

2 = 致命错误。

7 = 命令行错误。

8 = 没有足够的内存进行操作。

255 = 用户停止了进程。


编辑:如果您不想要包含所有这些Compressing <filename>行的详细日志,请改用以下命令:

7za a Test.7z *.* | findstr /i /v "pavlov scanning compressing" >Log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

(上面带有开关的 findstr 命令排除了所有包含引号内单词的行。)