我的批处理程序
FINDSTR /C:"Result Comparison failure" %tmp_result_file%
Run Code Online (Sandbox Code Playgroud)
我想做folloiwng,将上面命令的结果设置为变量.如果找到,将第一行设置为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
)
Run Code Online (Sandbox Code Playgroud)
很奇怪,结果是:
xx
Resultxxx
xx
背景是我有两个项目%source_file%,所以运行2次.
对于第一个,FINDSTR找不到任何东西,所以打印xxx
第二个,它在findstr中找到一个,但只打印" Result"而不是" Result Comparison failure",xx在结果之前打印.很奇怪!
第一个问题是因为您只是从FOR获取了第一个令牌。为了解决这个问题,您有两种解决方案,一种是回显找到字符串的整行。
for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i
Run Code Online (Sandbox Code Playgroud)
或回显找到的三个标记
for /f %%i in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do echo %%i %%j %%k
Run Code Online (Sandbox Code Playgroud)
第二个问题,xx回响了两次,是因为您运行了两次命令。第一个xx是第一次运行的,第二个是第二次运行的。如果要防止出现第二种情况,则需要使用一些其他逻辑。例如,设置一个变量然后检查它。警告,在循环中设置变量需要启用延迟扩展并使用!xx !!语法(有关详细说明,请参见HELP SET)
setlocal enabledelayedexpansion
...
set result=
for /f %%i "tokens=*" in ('FINDSTR /C:"Result Comparison Failure" %tmp_result_file%') do (
set result=%%i
)
if "!result!"=="" (
echo !result!
) else (
echo xx
)
Run Code Online (Sandbox Code Playgroud)