PDA

Показать полную графическую версию : [решено] Вывод строк текстового файла, начиная с одной и заканчивая другой


Bruce Wayne
06-08-2013, 17:35
Прошу прощения за очередное беспокойство... Подскажите, пожалуйста, как можно реализовать вывод строк из файла (начиная со строки №: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: пишет, что слишком много аргументов для командной строки :(

megaloman
06-08-2013, 18:18
При условии что в файле нет пустых строк@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
megaloman, спасибо Вам, всё работает! :up: Благодарю! :hi:

Iska
06-08-2013, 19:06
Мой вариант:
@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
Iska, спасибо, Ваш способ проще и компактнее :good: Единственный минус - поглощение символов [] и того, что находится между ними.

Foreigner
07-08-2013, 07:32
На всякий случай:

@echo off
setlocal

set "from=10"
set "to=20"

sed -n "%from%,%to% p" 1.txt




© OSzone.net 2001-2012