gpt4 book ai didi

batch-file - 批处理如何将 FINDSTR 结果设置为变量并禁用 findstr 打印到控制台

转载 作者:行者123 更新时间:2023-12-04 02:15:57 25 4
gpt4 key购买 nike

我的批处理程序

FINDSTR  /C:"Result Comparison failure"  %tmp_result_file% 

我想做以下操作,将上述命令的结果设置为变量。
如果找到,将第一行设置为变量或将所有找到的行设置为变量对我来说是可以的。

上面的命令也会将 findstr 命令打印到控制台甚至@echo off。有什么方法可以禁用打印。

多谢

我的脚本的一部分,我所做的是在源文件的每一行上运行命令并将运行结果放入 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% 中有两个项目,所以out for run 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

或 echo 找到的三个 token
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com