Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 27628
Благодарности: 8082

Профиль | Отправить PM | Цитировать


Ну, например, так:
Скрытый текст
Код: Выделить весь код
@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», и т.п.) и код, мягко говоря, не слишком оптимален, но коли Вам «любое решение, главное что бы хоть что то было» — полагаю, сойдёт.
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:49, 14-11-2014 | #4