Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Вывод строк текстового файла, начиная с одной и заканчивая другой (http://forum.oszone.net/showthread.php?t=265669)

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: пишет, что слишком много аргументов для командной строки :(

megaloman 06-08-2013 18:18 2197370

При условии что в файле нет пустых строк
Код:

@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:

Iska 06-08-2013 19:06 2197411

Мой вариант:
Код:

@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: Единственный минус - поглощение символов [] и того, что находится между ними.

Foreigner 07-08-2013 07:32 2197647

На всякий случай:
Код:

@echo off
setlocal

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

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



Время: 21:17.

Время: 21:17.
© OSzone.net 2001-