Убедитесь, что в 15-й строке есть правильная строка в пакете - PullRequest
1 голос
/ 19 октября 2011

фактическая проблема

У меня есть текстовый файл, и я хочу проверить, есть ли в 15-й строке правильная строка,
Я мог бы найти весь текстовый файл, но это было бы медленнее.

сейчас я буду искать первую строку только потому, что я знаю, как это сделать, но если вы знаете, как это сделать для 15-го

в text.txt:

zuluvictorcharlietango  
etc...  
etc...

код: допустим, я хочу проверить, находится ли Чарли где-то в первой строке текстового файла

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

Ответы [ 4 ]

2 голосов
/ 20 октября 2011

Если вы не возражаете против использования временного файла, вы можете заменить свою первую строку следующим:

more /e +14 text.txt >text.tmp
<text.tmp set /p fifteenth=
2 голосов
/ 26 октября 2011

Вы можете попробовать этот метод:

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
1 голос
/ 19 октября 2011

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
)
0 голосов
/ 28 марта 2012

@ Космические шары это не может быть проще, это просто попытка

первая строка кода создает файл поиска с номером строки (номер белья и: добавляется

в файл и вторая строка кода даст 15-ю строку в файле поиска

the tokens = 1, * delims =: используется для получения первого токена с разделителем и оставшейся части

line и %% 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
...