Batch file 批处理如何将FINDSTR结果设置为变量并禁用FINDSTR打印到控制台
我的批处理程序Batch file 批处理如何将FINDSTR结果设置为变量并禁用FINDSTR打印到控制台,batch-file,Batch File,我的批处理程序 FINDSTR /C:"Result Comparison failure" %tmp_result_file% 我想执行以下操作,将上述命令的结果设置为变量。 如果找到,将第一行设置为Variable或将所有找到的行设置为Variable对我来说是可以的 此外,上面的命令将打印findstr命令,以控制台甚至@echo off。是否有任何方法禁用打印 非常感谢 作为脚本的一部分,我要做的是在sourcefile中的每一行上运行命令,并将运行结果放入tmp文件中,然后使
FINDSTR /C:"Result Comparison failure" %tmp_result_file%
我想执行以下操作,将上述命令的结果设置为变量。
如果找到,将第一行设置为Variable或将所有找到的行设置为Variable对我来说是可以的
此外,上面的命令将打印findstr命令,以控制台甚至@echo off。是否有任何方法禁用打印
非常感谢
作为脚本的一部分,我要做的是在sourcefile中的每一行上运行命令,并将运行结果放入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
Resultxxx
xx
xx
结果XXX
xx
背景是我在%source\u file%
中有两个项目,因此该文件将运行两次。对于第一个,FINDSTR找不到任何内容,因此打印
xxx
对于第二个,它在findstr中找到一个,但只打印“
结果
”而不是“结果比较失败
”,并且在结果中在它之前打印xx。很奇怪 检查FOR/F命令
for /f %i in ('FINDSTR /C:"Result Comparison failure" %tmp_result_file%') do ...
第一个问题是,您只需从FOR获取第一个令牌。要解决这个问题,有两种解决方案,一种是回显找到字符串的完整行
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,第二个xx是第二次运行的xx。如果你想阻止第二次,你需要使用一些额外的逻辑。例如,设置一个变量,然后检查它。警告,在循环中设置变量需要启用延迟扩展并使用!xx!!语法(有关详细说明,请参见帮助集)
键入
以获取/?
查看所有选项。delims选项似乎与此相关。我试图为你指出正确的方向,而不是为你解决整个问题。你可能想要for/f“delims=“%%I in(…
@RaymondChen那么你怎么能期望得到答案的复选标记呢?@Jamie答案是用于/f。最初提出的问题非常广泛,基本上是一个问题“按程序为我编写”,这是不应该的。@RaymondChen很公平,我看到的问题缺乏我原本期望的上下文。+1,但是为什么不直接比较%%I
的值呢?就像这样(在内部循环的主体中):如果“%%I”==”(ECHO xx)ELSE ECHO%%i
。是的,你是对的,这是一种可能性。我只是重复使用了处理多个查找结果的代码。tokens=*在%%i之前,不是吗?出现语法错误“tokens=*”此时是意外的。
在第一个给定的for/F
命令上。“tokens”=*“
应该放在%%i
之前。非常有用,谢谢。
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
)