Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 验证第15行是否批量包含正确的字符串_String_Search_Variables_Batch File - Fatal编程技术网

String 验证第15行是否批量包含正确的字符串

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

实际问题

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

现在我要搜索第1行,只是因为我知道怎么做,但是如果你知道第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
问题出在findstr的某个地方,变量first

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
)
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=