我的批处理程序
FINDSTR /C:"Result Comparison failure" %tmp_result_file%
我要执行以下操作,将上述命令的结果设置为变量。
如果找到,将第一行设置为varible或将所有找到的行设置为varible就可以了。
上面的命令也将打印findstr命令来控制台,甚至关闭@echo。有什么方法可以禁用打印。
多谢
在脚本的一部分中,我要做的是在源文件的每一行上运行命令,并将运行结果放入tmp文件中,然后使用find str查找失败的字符串以检查运行结果。
for /f %%a in (%source_file%) do (
echo run %%a >> %output_file%
call %run_script_command% %%a > %tmp_result_file% 2>&1
::notepad %tmp_result_file%
for /f %%i in ('FINDSTR /C:"Result Comparison failure" %tmp_result_file%') do echo %%ixxx
echo xx
)
很奇怪,结果是:
xx
结果xxx
xx
背景是我在
%source_file%
中有两个项目,因此要运行2次。对于第一个,FINDSTR无法找到任何内容,因此请打印
xxx
对于第二个,它在findstr中找到一个,但是只打印“Result
”而不是“Result Comparison failure
”,并且在结果之前打印xx。很奇怪! 最佳答案
第一个问题是因为您只是从FOR获取了第一个 token 。为了解决这个问题,您有两种解决方案,一种是回显找到字符串的整行...
for /f "tokens=*" %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i
或回显找到的三个标记
for /f %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i %%j %%k
第二个问题,xx回响了两次,是因为您运行了两次命令。第一个xx是第一次运行的,第二个是第二次运行的。如果要防止出现第二种情况,则需要使用一些其他逻辑。例如,设置一个变量然后检查它。警告,在循环中设置变量需要启用延迟扩展并使用!xx!。语法(有关详细说明,请参见HELP SET)
setlocal enabledelayedexpansion
...
set result=
for /f "tokens=*" %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do (
set result=%%i
)
if "!result!"=="" (
echo !result!
) else (
echo xx
)
关于batch-file - 批处理如何将FINDSTR结果设置为变量并禁用findstr打印到控制台,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7605328/