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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сформировать из 1 файла несколько файлов с разным числом строк

Ответить
Настройки темы
CMD/BAT - Сформировать из 1 файла несколько файлов с разным числом строк

Новый участник


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

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


Здравствуйте! Помогите пожалуйста.
Задача:
Есть текстовый файл 1.txt из 500 строк.

Нужно сформировать из его строк 4 файла:
1. Содержащий первые 400 строк из 1.txt
2. Содержащий первые 300 строк из 1.txt
3. Содержащий первые 200 строк из 1.txt
4. Содержащий первые 100 строк из 1.txt

Можно ли сделать это в 1 батнике?

Отправлено: 22:21, 06-05-2017

 

Ветеран


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

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


Можно. Но проще будет сделать на WSH, або PoSH.

Отправлено: 23:13, 06-05-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

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


nastasa,
ну 500 еще не так много, конечно, у меня уходит 8сек и я скажу вам что это очень много для подобной операции
Код: Выделить весь код
@echo off
set /a x=1
for %%a in (400 300 200 100) do set /a "x=%%a,x+=1,n+=1"& call :# "%%n%%" "%%x%%"
exit

:#
 <"1.txt">"new_%~1.txt" (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @echo:[%%a]%%b|>nul find "%~2" && (exit /b) || (echo:%%b)) 
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:51, 07-05-2017 | #3


Ветеран


Contributor


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

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


Цитата alpap:
ну 500 еще не так много, конечно, у меня уходит 8сек и я скажу вам что это очень много для подобной операции »
На моём десятилетнем ноуте на Ваш батник уходит 40 сек, и это напрягает.
Попробовал нарисовать гибрид батника и js-скрипта. Делается мигом.
Код: Выделить весь код
@set @E=1; /*

@Echo Off

Set "FileIn=Z:\Soft_In\тра ля ля.TXT"
Set "NStrok=400 300 200 100"

Cscript //NoLogo /E:jscript "%~dpnx0" "%FileIn%" %NStrok%

GoTo :Eof

*/

var i;
var oArg = WScript.Arguments;

var NCount=oArg.Count();

if (NCount<2) {
	WScript.Echo("═х ттхфхэ√ эхюсїюфшь√х рЁуєьхэЄ√");
} else {
	NCount=NCount-2;
	
	var NStrok= new Array(NCount);
	var NFile0=oArg(0);

	NFile0=NFile0.replace(/\\/g,"\\\\");

	var FSO=WScript.CreateObject("Scripting.FileSystemObject");

	var PFN=FSO.GetParentFolderName(NFile0);
	if (PFN != '') PFN+='\\\\';

	var BN=FSO.GetBaseName(NFile0);	
	var EN=FSO.GetExtensionName(NFile0);	
	
	for (i=1; i<=NCount+1; i++) NStrok[i-1]=oArg(i);

	var j,ij,len;

	for (i=0; i<=NCount; i++) {
		for (j=i; j<=NCount; j++) {
			if (NStrok[i]>NStrok[j]) {
				ij=NStrok[i];
				NStrok[i]=NStrok[j];
				NStrok[j]=ij;				
	}       }       }
	
	var F=FSO.OpenTextFile(NFile0,1,false);
	var Sall=F.ReadAll();
	var Mass=Sall.split('\r\n');
	F.Close();
	
	len = Mass.length;
	Sall='';
	j=0;
	ij=NStrok[j];

	for (i = 0; i < len; ++i) {
		if (i != 0) Sall+='\r\n';
		Sall+=Mass[i];

		if (i+1==ij) {
			// WScript.Echo(PFN+BN+'-'+ij+'.'+EN);
			F=FSO.OpenTextFile(PFN+BN+'-'+ij+'.'+EN,2,true);
			F.Write(Sall);
			F.Close();

			j++;
			while (j<=NCount) {
				if (ij != NStrok[j]) break;
				j++;
			}
			if (j>NCount) break;
			ij=NStrok[j];
		}
	} 			
}
А вообще-то очень плохо, что нет стандартной утилиты для того, чтобы прочесть заданное кол-во строк в батнике
Гораздо интереснее написать батник из нескольких строк, чем несколько десятков в WSH-скрипте.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 10-05-2017 в 23:13.


Отправлено: 23:04, 10-05-2017 | #4


Ветеран


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

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


Цитата alpap:
у меня уходит 8сек и я скажу вам что это очень много для подобной операции »
Цитата megaloman:
На моём десятилетнем ноуте на Ваш батник уходит 40 сек, и это напрягает. »
А так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

echo Start: %time%

for %%i in (400 300 200 100) do (
	<"0001.txt" >"Out_%%i.txt" (
		for /l %%j in (1, 1, %%i) do (
			set /p sVar=
			echo !sVar!
		)
	)
)

echo Finish: %time%

endlocal
exit /b 0
?



Цитата megaloman:
А вообще-то очень плохо, что нет стандартной утилиты для того, чтобы прочесть заданное кол-во строк в батнике »
Обходится таким вот кодом .

Отправлено: 03:30, 11-05-2017 | #5


Ветеран


Contributor


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

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


Iska, Позвольте не позволить! Загвоздка в том, что при наличии в исходном файле пустых строк Ваш скрипт работает криво, правда, быстро.
Вот фрагмент исходного файла и фрагмент после обработки
Код: Выделить весь код
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333333333333333333333

444444444444444444444444444444444444444444444
55555555555555555555555555555555555555555555555555555
                      

66666666666666666666666666666666666666666666
7                                          7777777777777777777777777
88888888888888888888888888888888888888888888                        88888888
999999999999999 9999999999999 999 99 9999999999999999999 999999999999999999
000000000000000000000
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Код: Выделить весь код
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
22222222222222222222222222222222222222222222222222222222222
3333333333333333333333333333333333333333333333333333333333333333333333333
3333333333333333333333333333333333333333333333333333333333333333333333333
444444444444444444444444444444444444444444444
55555555555555555555555555555555555555555555555555555
Режим вывода команд на экран (ECHO) отключен.
Режим вывода команд на экран (ECHO) отключен.
66666666666666666666666666666666666666666666
7                                          7777777777777777777777777
88888888888888888888888888888888888888888888                        88888888
999999999999999 9999999999999 999 99 9999999999999999999 999999999999999999
000000000000000000000

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 11:03, 11-05-2017 | #6


Ветеран


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

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


Цитата megaloman:
Iska, Позвольте не позволить! Загвоздка в том, что при наличии в исходном файле пустых строк Ваш скрипт работает криво »
Позволю . Вы совершенно правы. Внесём одно изменение, и ещё одно — добавим:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

echo Start:  %time%

for %%i in (400 300 200 100) do (
	<"0001.txt" >"Out_%%i.txt" (
		for /l %%j in (1, 1, %%i) do (
			set /p sVar=
			echo.!sVar!
			set sVar=
		)
	)
)

echo Finish: %time%

endlocal
exit /b 0


P.S. В любом случае останутся затыки с %, !, <, > и т.п.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 11-05-2017 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сформировать из 1 файла несколько файлов с разным числом строк

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение файлов из списков по разным папкам blither Скриптовые языки администрирования Windows 3 12-04-2016 13:43
CMD/BAT - Создание .bat файла для выборки строк из .csv файла в .xlsx GODolubOFF Скриптовые языки администрирования Windows 10 14-12-2015 15:34
PowerShell - [решено] Замена строк из файла строками из файла в файле bcubbs@fb Скриптовые языки администрирования Windows 6 24-01-2013 17:22
CMD/BAT - Удалить несколько строк из файла GhostKU Скриптовые языки администрирования Windows 1 01-09-2011 18:40
Создание ролика из файлов с разным разрешением, FPS и уровнем громкости Kzer-Za Видео и аудио: обработка и кодирование 1 20-08-2011 23:22




 
Переход