0
for /f "tokens=3" %%f in ('find /c /i "apples" "test.txt"') do set varMWG=%%f
REM echo %varMWG%

if %varMWG% EQU 1 (
    @echo TRUE
) else (
    @echo FALSE
)

如果找到字符串,我想回显变量行,而不是回显 TRUE 或 FALSE,如果找不到,我仍然回显 FALSE。

test.txt 包含

fdgsdf
hgsfrtgyr
apples
fdsgfghs
erwyuweu
4

2 回答 2

1

如果您只需要回显匹配的行,或者如果没有行匹配则回显 FALSE(换句话说,您不需要该变量),那么

findstr /ilc:"apples" "test.txt" || echo FALSE

请记住,可能有多行与您的搜索匹配。

如果您需要一个包含最后找到的行的变量,则:

set "varMWG="
for /f "delims=" %%S in ('findstr /ilc:"apples" "test.txt"') do set "varMWG=%%S"
if defined varMWG (echo %varMWG%) else echo FALSE

注意 - 延迟扩展会更安全。根据 varMWG 的内容,使用常规扩展的 ECHO 可能会失败。

如果您需要包含第一个找到的行的变量,则:

set "varMWG="
for /f "delims=" %%S in ('findstr /ilc:"apples" "test.txt"') do (
  set "varMWG=%%S"
  echo %%S
  goto :break
)
:break
if not defined varMWG echo FALSE

最后一个选项永远不需要延迟扩展。

于 2012-09-28T18:07:13.970 回答
0

如果“回显变量行”是指回显搜索字符串“apples”,则以下代码就足够了:

@echo off
for /f "tokens=* delims= " %%f in (test.txt) do (
if %%f EQU apples (echo %%f
) else echo false
)

输出:

false
false
apples
false
false
于 2012-09-28T17:52:41.637 回答