实际问题
我有一个文本文件,我想验证第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和变量的第一个
答案 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
此代码将为您找到第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