Вложенный цикл For для поиска конкретной строки в файле - PullRequest
0 голосов
/ 29 марта 2019

Этот код от Джеба -

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

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

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 Ответ

1 голос
/ 29 марта 2019

Не совсем понимаю, что вы делаете с вашей числовой переменной, поскольку она всегда будет равна 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...