Bruce Wayne |
06-08-2013 17:35 2197338 |
Вывод строк текстового файла, начиная с одной и заканчивая другой
Прошу прощения за очередное беспокойство... Подскажите, пожалуйста, как можно реализовать вывод строк из файла (начиная со строки №:M и заканчивая строкой №:N)? Я нашёл такой пример:
Код:
@echo off
Setlocal EnableDelayedExpansion
chcp 1251>nul
set /p file=Введите имя файла-
set /p m=Введите M-
set /p n=Введите N-
chcp 866>nul
Set /A m-=1, n-=1
For /F "delims=" %%A in ('more +%m% ^<"%file%"') do (
echo %%A
if !m!==!n! (>nul pause& goto :eof)
Set /A m+=1
)
Но команда more даёт сбой на Wondows 8: пишет, что слишком много аргументов для командной строки :(
|
При условии что в файле нет пустых строк
Код:
@Echo Off
Cls
SetLocal EnableExtensions EnableDelayedExpansion
Set /A M=10
Set /A N=20
If %M% GTR 1 (
Set /A MM=%M%-1
Set "Skip=Skip=!MM!"
) Else (
Set "Skip="
)
Set /A K=0
Set /A KK=%N%-%M%+1
FOR /F "%Skip% usebackq delims=" %%i IN (123.txt) DO (
Echo %%i
Set /A K=!K!+1
If !K! GEQ %KK% GoTo :Eof
)
|
Bruce Wayne |
06-08-2013 18:30 2197379 |
megaloman, спасибо Вам, всё работает! :up: Благодарю! :hi:
|
Мой вариант:
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set /a iFrom = 5
set /a iTo = 15
for /f "usebackq tokens=1,2* delims=[]" %%i in (
`type "E:\Песочница\0308\0001.txt" ^| find.exe /v /n ""`
) do if %%i geq %iFrom% if %%i leq %iTo% echo.%%j
endlocal
exit /b 0
Работает и с пустыми строками.
|
Bruce Wayne |
06-08-2013 23:25 2197585 |
Iska, спасибо, Ваш способ проще и компактнее :good: Единственный минус - поглощение символов [] и того, что находится между ними.
|
На всякий случай:
Код:
@echo off
setlocal
set "from=10"
set "to=20"
sed -n "%from%,%to% p" 1.txt
|
Время: 21:17.
© OSzone.net 2001-