验证第15行是否在批处理中包含正确的字符串

时间:2011-10-19 15:06:11

标签: string search variables batch-file

实际问题

我有一个文本文件,我想验证第15行是否包含正确的字符串,
我可以搜索整个txt文件,但速度会慢一些。

现在生病了只是因为我知道如何去做,但是如果你知道怎么做第15行

text.txt中的

zuluvictorcharlietango  
etc...  
etc...

代码:假设我想验证charlie是否在txt文件的第一行中某处

set /p first<=text.txt
set list=alpha bravo charlie delta echo foxtrot
setlocal 
for %%A in (%list%) DO (  
    ping -n 2 -w 1 127.0.0.1>NUL
    findstr /m "%%A" %first%
    echo !errorlevel!
    if !ERRORLEVEL! == 0 (
        echo cool
    )
    echo uncool
)
endlocal

问题出在了findtr和变量的第一个

4 个答案:

答案 0 :(得分:2)

如果您不介意使用临时文件,可以使用以下内容替换第一行:

more /e +14 text.txt >text.tmp
<text.tmp set /p fifteenth=

答案 1 :(得分:2)

您可以尝试这种方法:

setlocal EnableDelayedExpansion
for /f "skip=14 delims=" %%a in (text.txt) do set line15=%%a& goto continue
:continue
set list=alpha bravo charlie delta echo foxtrot
for %%a in (%list%) do if not !line15:%%a=! == !line15! goto found
echo uncool
goto :eof
:found
echo cool

答案 2 :(得分:1)

FINDSTR需要文件名,而不是文件的内容。请尝试下面的代码。我删除了PING命令...不确定为什么要延迟。

@ECHO OFF

SET LIST=alpha bravo charlie delta echo foxtrot
SETLOCAL
FOR %%A IN (%list%) DO (  
  FINDSTR /M "%%A" text.txt
  ECHO %ERRORLEVEL%
  IF %ERRORLEVEL% == 0 (
    ECHO cool
  ) ELSE (
    ECHO uncool
  )
)
ENDLOCAL

编辑1

此代码将为您找到第15行。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET LINE=1
FOR /F %%i IN (text.txt) DO (
  IF !LINE! EQU 15 (
    ECHO %%i
  )
  SET /A LINE=LINE+1
)

答案 3 :(得分:0)

@Spaceballs这可能不简单,只是一个尝试

第一行代码创建一个带行号的搜索文件(linenumber和:附加

到文件和第二行代码将给出搜索文件中的第15行

tokens = 1,* delims =:用于获取带分隔符的第一个令牌及

的其余部分

行和%% k会给该行的其余部分忽略第一个令牌,即%% j

此逻辑用于计算已经包含“:”的文件

以下代码: -

findstr /n /v "mojofoko" search_file.txt > search_num.txt

for /f "usebackq tokens=1,* delims=:" %%j in (`findstr /B "15:" search_num.txt`) 
Do @echo.%%k
@del search_num.txt