DOS如果发现FINSTR将变量设置为该行,然后是echo变量?

时间:2012-09-28 15:56:20

标签: dos batch-file

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

2 个答案:

答案 0 :(得分: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

注意 - 延迟扩展会更安全。使用常规扩展的ECHO可能会失败,具体取决于varMWG的内容。

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

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

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

答案 1 :(得分: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