我的批处理程序

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/

10-11 22:47
查看更多