Это может быть вопрос XY, но я пытаюсь вывести на экран различные строки из текстового файла.
@setlocal enableextensions enabledelayedexpansion
@echo off
set /a "line = 0"
for /f "tokens=* delims= " %%a in (file.txt) do (
set /a "line = line+1"
if !line!==18 set thing1=%%a
if !line!==19 set thing2=%%a
if !line!==20 set thing3=%%a
)
endlocal & set thing1=%thing1% & set thing2=%thing2% & set thing3=%thing3%
echo:
echo %thing1%
echo %thing2%
echo %thing3%
pause
Это работает хорошо и аккуратно по сравнению с другими, которые я нашел, поэтому я был утомлен, чтобы сделать это более адаптируемо. Я могу сделать переменными номера строк, но что, если я хочу четыре строки или диапазон строк? Поэтому я попытался сделать для l oop. Перечислите все строки:
(
echo @setlocal enableextensions enabledelayedexpansion
echo @echo off
echo set /a "line = 0"
echo for /f "tokens=* delims= " %%a in (file.txt^) do (
echo set /a "line = line+1"
)>>test.bat
for /l %%m in (1,1,10) do (
echo if !line!==%%m set thing%%m=%%%%a
)>>test.bat
echo )>>test.bat
echo endlocal ^& )>>test.bat
for /l %%m in (1,1,10) do (
echo set thing%%m^=%%thing%%%%m ^&
)>>test.bat
Тогда я мог бы echo %thing(anynumber%)
, как я хотел. Это сталкивается с проблемами, когда список для l oop должен находиться в одной строке:
endlocal & set thing1=%thing1% & set thing2=%thing2% & set thing3=%thing3%
Вместо этого он выводит:
endlocal &
set thing1=%thing%1 &
set thing2=%thing%2 &
set thing3=%thing%3 &
etc...
Я знаю, prompt $H
может вернуться назад, но я думаю, что это тупик для того, что я пытаюсь здесь. Я не могу найти много на обратной линии онлайн. Также он добавляет амперсанд к окончательному %%thing%%
в списке.
Пример file.txt
This is line one
This is line two
This is line three
This is line four
This is line five
This is line six
This is line seven
This is line eight
This is line nine
This is line ten
Возможно, findstr - это способ go по этому поводу. Я нашел это и отредактировал, чтобы он соответствовал тому, что я пытался сделать:
:start
cls
set /p "line= Which lines?"
for /f "tokens=* delims=[] " %%a in ('type file.txt^|find /v /n ""') do (
echo/%%a|findstr /l /b "%line%" >nul && echo/%%a
)
pause
goto :start
Но при вводе 1 он будет повторять каждый экземпляр, начинающийся с "1", то есть 1,11,12,13 et c. Это, кажется, почти там. Я пробовал различные переключатели с findstr /?
, но не могу понять это. Если бы он мог также выполнять входные диапазоны, то входная строка 1-5,7,12-15 повторила бы их 10 строк.