如何从批处理例程输出特定行?

时间:2016-10-13 20:39:47

标签: windows batch-file for-loop

我有以下批处理脚本,递归迭代给定文件夹中的所有文件:

FOR /R %%i IN ("*.wmv") DO "C:\Program Files\7-Zipa\7za.exe" a -mx0 -tzip -pPassword -mem=AES256 -y "%%~dpni.zip" "%%i"

当运行时,它会为每个处理的文件生成以下输出:

 7-Zip (a) [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04

 Scanning the drive:
 1 file, 382316 bytes (374 KiB)

 Creating archive: C:\test\7208969.zip

 Items to compress: 1


 Files read from disk: 1
 Archive size: 382524 bytes (374 KiB)
 Everything is Ok

我想要的是创建一个输出文本文件,每次迭代只包含这两行:

Creating archive: C:\test\7208969.zip
Everything is Ok

我尝试使用类似的东西从另一个批处理调用主批处理脚本(这只是一个说明性示例):

FOR /F "(tried with skip, delims, tokens, etc)" %%G IN ('7zip.bat') DO echo %%G

但我所尝试的所有内容最终都会写出许多奇怪的东西,除了我需要的东西。

如果有人能以任何方式启发我如何完成这项工作,我们将非常感激!

1 个答案:

答案 0 :(得分:1)

使用findstr和2个表达式在您的循环中输出命令的输出,每行一个。

FOR /R %%i IN ("*.wmv") DO "C:\Program Files\7-Zipa\7za.exe" a -mx0 -tzip -pPassword -mem=AES256 -y "%%~dpni.zip" "%%i" | findstr /C:"Creating archive" /C:"Everything"

此时,我不会遇到出错的情况。显然,您可以根据需要添加任意数量的字符串:

... | findstr /C:"Creating archive" /C:"Everything is OK" /C:"Something went wrong"