Ну, например, так:
Скрытый текст
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=%~1
set sCount1=%~2
set sCount2=%~3
set sResultFile1=1.txt
set sResultFile2=2.txt
if defined sSourceFile (
if defined sCount1 (
if defined sCount2 (
if exist "%sSourceFile%" (
set /a iCount1 = %sCount1%
if !iCount1! geq 1 (
set /a iCount2 = %sCount2%
if !iCount2! geq 1 (
call :Head "!iCount1!"
call :Tail "!iCount1!" "!iCount2!"
) else (
echo Third parameter [%sCount2%] must be numerical and more than 0
call :Usage
)
) else (
echo Second parameter [%sCount1%] must be numerical and more than 0
call :Usage
)
) else (
echo Can't find source file [%sSourceFile%].
exit /b 2
)
) else (
call :Usage
exit /b 1
)
) else (
call :Usage
exit /b 1
)
) else (
call :Usage
exit /b 1
)
exit /b 1
if not defined sSourceFile (
call :Usage
exit /b 1
)
if defined sCount1 echo [%iCount1%]
if defined sCount2 echo [%iCount2%]
endlocal
exit /b 0
:Usage
echo Error in parameters
echo.
echo Usage: %~nx0 ^<Source file^> ^<String's count for 1st result file^> ^<String's count for 2nd result file^>
exit /b 0
:Head
setlocal enableextensions enabledelayedexpansion
set /a iHeadCount = %~1
set /a iTotalCount = 0
>"%sResultFile1%" (
for /f "usebackq tokens=1* delims=[]" %%i in (
`type "%sSourceFile%" ^| find.exe /n /v ""`
) do (
set /a iTotalCount += 1
echo.%%j
if !iTotalCount! geq %iHeadCount% exit /b
)
)
endlocal
exit /b 0
:Tail
setlocal enableextensions enabledelayedexpansion
set /a iSkipCount = %~1
set /a iTailCount = %~2
set /a iTotalCount = 0
>"%sResultFile2%" (
for /f "usebackq tokens=1* delims=[]" %%i in (
`type "%sSourceFile%" ^| more +%iSkipCount% ^|find.exe /n /v ""`
) do (
set /a iTotalCount += 1
echo.%%j
if !iTotalCount! geq %iTailCount% exit /b
)
)
endlocal
exit /b 0
Тут, конечно, не хватает ещё кучи проверок (например, что имя исходного файла не «1.txt» и не «2.txt», и т.п.) и код, мягко говоря, не слишком оптимален, но коли Вам «любое решение, главное что бы хоть что то было» — полагаю, сойдёт.