#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, так что теперь эта часть работает. Я попробую предложенный вами метод подпрограммы.