Вложенный цикл For для поиска определенной строки в файле

#batch-file #find

#пакетный файл #Найти

Вопрос:

Этот код из Jeb —

 set "lineNr=%1"
set /a lineNr-=1
for /f "usebackq delims=" %%a in (`more  %lineNr% text.txt`) DO (
  echo %%a
  goto :leave
)
:leave
  

в моем случае не работает. Я хочу включить ее во вложенный цикл for, подобный этому

 for %%x in (*.md) do (
set "lineNr=7"
set /a lineNr-=1
for /f "usebackq delims=" %%a in (`more  %lineNr% "%%x"`) DO (
  echo %%a
  goto :leave
)
:leave
)
  

Если я использую вышеуказанное, я получаю ошибку

 ) was unexpected at this time.
  

Если я сделаю это таким образом

 for %%x in (*.md) do (
    set "lineNr=7"
    set /a lineNr-=1
    for /f "usebackq delims=" %%a in (`more  %lineNr% "%%x"`) DO (
      echo %%a
      goto :leave
    )
    )
    :leave
  

тогда все остальные файлы *.md не будут обработаны, потому что я выхожу из цикла, я полагаю, и это также не работает, потому что «LineNR» по какой-то причине удален, как показано здесь из вывода cmd —

 set "lineNr=7"
 set /a lineNr-=1
 for /F "usebackq delims=" %a in (`more   "%x"`) DO (
echo %a
 goto :leave
)
)
:leave

Cannot access file G:test 
  

Что я делаю не так или есть более простой способ захватить пару строк и вывести их в текстовый файл?

Ответ №1:

Не совсем понимаю, что вы делаете со своей переменной number, поскольку она всегда будет равна 6 для каждого обрабатываемого файла, но у вас также возникает проблема с задержкой расширения при использовании этой переменной, потому что вы находитесь внутри блока кода.

Вы можете решить свою проблему, преобразовав вашу внутреннюю FOR команду в функцию.

 @echo off
for %%x in (*.md) do CALL :routine "%%~x"
GOTO :EOF

:routine
set "lineNr=7"
set /a lineNr-=1
for /f "usebackq delims=" %%a in (`more  %lineNr% "%~1"`) DO (
  echo %%a
  goto :EOF
)
  

Комментарии:

1. Спасибо. Мне пришлось использовать! вместо% вокруг LineNr, так что теперь эта часть работает. Я попробую предложенный вами метод подпрограммы.