Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- setlocal
- rem ---------------------------
- rem ------ arg parsing --------
- rem ---------------------------
- if "%~1" equ "" goto :help
- for %%H in (/h -h /help -help) do (
- if /I "%~1" equ "%%H" goto :help
- )
- setlocal enableDelayedExpansion
- set "prev="
- for %%A in (%*) do (
- if /I "!prev!" equ "-file" set file=%%~fsA
- if /I "!prev!" equ "-begin" set begin=%%~A
- if /I "!prev!" equ "-end" set end=%%A
- set prev=%%~A
- )
- endlocal & (
- if "%file%" neq "" (set file=%file%)
- if "%begin%" neq "" (set /a begin=%begin%)
- if "%end%" neq "" (set /a end=%end%)
- )
- rem -----------------------------
- rem --- invalid cases check -----
- rem -----------------------------
- if "%file%" EQU "" echo file not defined && exit /b 1
- if not exist "%file%" echo file not exists && exit /b 2
- if not defined begin if not defined end echo neither BEGIN line nor END line are defined && exit /b 3
- rem --------------------------
- rem -- function selection ----
- rem --------------------------
- if defined begin if %begin%0 LSS 0 for /F %%C in ('find /c /v "" ^<"%file%"') do set /a lines_count=%%C
- if defined end if %end%0 LSS 0 if not defined lines_count for /F %%C in ('find /c /v "" ^<"%file%"') do set lines_count=%%C
- rem -- begin only
- if not defined begin if defined end if %end%0 GEQ 0 goto :end_only
- if not defined begin if defined end if %end%0 LSS 0 (
- set /a end=%lines_count%%end%+1
- goto :end_only
- )
- rem -- end only
- if not defined end if defined begin if %begin%0 GEQ 0 goto :begin_only
- if not defined end if defined begin if %begin%0 LSS 0 (
- set /a begin=%lines_count%%begin%+1
- goto :begin_only
- )
- rem -- begin and end
- if %begin%0 LSS 0 if %end%0 LSS 0 (
- set /a begin=%lines_count%%begin%+1
- set /a end=%lines_count%%end%+1
- goto :begin_end
- )
- if %begin%0 LSS 0 if %end%0 GEQ 0 (
- set /a begin=%lines_count%%begin%+1
- goto :begin_end
- )
- if %begin%0 GEQ 0 if %end%0 LSS 0 (
- set /a end=%lines_count%%end%+1
- goto :begin_end
- )
- if %begin%0 GEQ 0 if %end%0 GEQ 0 (
- goto :begin_end
- )
- goto :eof
- rem -------------------------
- rem ------ functions --------
- rem -------------------------
- rem --- single cases ---
- :begin_only
- setlocal enableDelayedExpansion
- set counter=0
- for /f "usebackq delims=" %%L in ("%file%") do (
- set /a counter=!counter!+1
- if !counter! GEQ %begin% (
- setlocal disableDelayedExpansion
- (echo(%%L)
- endlocal
- )
- )
- endlocal
- goto :eof
- :end_only
- setlocal enableDelayedExpansion
- set counter=0
- for /f "usebackq delims=" %%L in ("%file%") do (
- set /a counter=!counter!+1
- if !counter! LEQ %end% (
- setlocal disableDelayedExpansion
- (echo(%%L)
- endlocal
- ) else goto :break_eo
- )
- :break_eo
- endlocal
- goto :eof
- rem ---- begin and end ---
- :begin_end
- setlocal enableDelayedExpansion
- if %begin% GTR %end% goto :break_be
- set counter=0
- for /f "usebackq delims=" %%L in ("%file%") do (
- set /a counter=!counter!+1
- IF !counter! GEQ %begin% IF !counter! LEQ %end% (
- setlocal disableDelayedExpansion
- (echo(%%L)
- endlocal
- ) else goto :break_be
- )
- :break_be
- endlocal
- goto :eof
- rem ------------------
- rem --- HELP ---------
- rem ------------------
- :help
- echo(
- echo %~n0 - dipsplays a lines of a file defined by -BEGIN and -END arguments passed to it
- echo(
- echo( USAGE:
- echo(
- echo %~n0 -file=file_to_process {-begin=begin_line ^| -end=end_line }
- echo or
- echo %~n0 -file file_to_process {-begin begin_line ^| -end end_line }
- echo(
- echo( if some of arguments BEGIN or END has a negative number it will start to count from the end of file
- echo(
- echo( http://ss64.org/viewtopic.php^?id^=1707
- echo(
- echo( by Vasil "npocmaka" Arnaudov
- goto :eof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement