String 验证第15行是否批量包含正确的字符串
实际问题 我有一个文本文件,我想验证第15行中的字符串是否正确, 我可以搜索整个txt文件,但速度会慢一些 现在我要搜索第1行,只是因为我知道怎么做,但是如果你知道第15行怎么做的话 在text.txt中:String 验证第15行是否批量包含正确的字符串,string,search,variables,batch-file,String,Search,Variables,Batch File,实际问题 我有一个文本文件,我想验证第15行中的字符串是否正确, 我可以搜索整个txt文件,但速度会慢一些 现在我要搜索第1行,只是因为我知道怎么做,但是如果你知道第15行怎么做的话 在text.txt中: zuluvictorcharlietango etc... etc... 代码:假设我想验证charlie是否在txt文件的第一行中 set /p first<=text.txt set list=alpha bravo charlie delta echo foxtrot
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
问题出在findstr的某个地方,变量firstfindstr需要的是文件名,而不是文件的内容。请尝试下面的代码。我删除了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
)
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
)
如果您不介意使用临时文件,可以将第一行替换为以下内容:
more /e +14 text.txt >text.tmp
<text.tmp set /p fifteenth=
如果您不介意使用临时文件,可以将第一行替换为以下内容:
more /e +14 text.txt >text.tmp
<text.tmp set /p fifteenth=
您可以尝试以下方法:
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
您可以尝试以下方法:
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
@太空球这可能并不简单,只是一次尝试 代码的第一行创建了一个搜索文件,其中行numberlinenumber和:被追加 第二行代码将给出搜索文件中的第15行 tokens=1,*delims=:用于获取带有分隔符的第一个token和 行和%%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
@太空球这可能并不简单,只是一次尝试 代码的第一行创建了一个搜索文件,其中行numberlinenumber和:被追加 第二行代码将给出搜索文件中的第15行 tokens=1,*delims=:用于获取带有分隔符的第一个token和 行和%%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
是的,这是可行的,但我想更快地搜索,因为我的txt文件通常只有几个megs@Spaceballs我不知道你的意思。那你的原始代码会更快吗?我刚刚找到一个很好的答案。。。创建一个temp.txt文件,把我的第一行放进去,然后搜索temp文件而不是原始文件,直到有人找到办法得到第15行谢谢!FINDSTR需要一个文件来查找…不是一个包含contents.ya的变量,但我想要更快的搜索,因为我的txt文件通常只有几个megs@Spaceballs我不知道你的意思。那你的原始代码会更快吗?我刚刚找到一个很好的答案。。。创建一个temp.txt文件,把我的第一行放进去,然后搜索temp文件而不是原始文件,直到有人找到办法得到第15行谢谢!FINDSTR需要一个文件来查找…而不是一个包含内容的变量。我最终使用set/p firstline=search,因为more/e创建了太多的大文件,并要求生成这些txt文件的人将字符串放在第一行。我最后使用set/p firstline=search,因为more/e创建了太多的文本大文件,并要求生成这些txt文件的人将字符串放在第一行。如果文件太大,您可以将其用于1,1,15中的/L%%a,请设置/p line15=