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

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

Ответить
Настройки темы
CMD/BAT - [решено] разбить файл на много файлов по шаблону и каждый файл положить в папку

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


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

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


Здравствуйте, я не силен в батниках помогите пожалуйста.

имеем файл с содержимым

[01.01]Описание лотоса
Людей издавна изумляла, радовала и притягивала красота цветков лотоса. Над поверхностью воды среди ярко-зелёных плавающих листьев распускается крупный (до 30 см диаметром) цветок. Жёлтый венчик окружён несколькими рядами нежных ярко-розовых или жёлтых лепестков. У основания их цвет более насыщенный, чем на кончиках.
Цветок лотоса всегда обращен к Солнцу, поэтому древние египтяне, индусы, китайцы обожествляли его, считали священным и загадочным растением. Цветки лотоса находили в древнеегипетских гробницах. Его изображения высечены в камне на древних памятниках архитектуры. В легендах и преданиях этих народов цветок лотоса всегда был символом красоты, мудрости и силы. Лотос - цветок богов, так считали древние индусы и египтяне. И не только из-за его красоты и обращенности к

[01.02]Акула
Из всех обитателей океана акулы, по-видимому, пользуются наибольшей известностью и самой дурной славой. В своём большинстве это крупные твари с длинным туловищем, имеющим максимально обтекаемую форму, что позволяет им развивать впечатляющую скорость и совершать дальние путешествия.
Акулы - хищники и поэтому, как правило, вооружены острыми, как бритва, зубами. Зубы растут во рту в 5-15 рядов. Сила челюстей чудовищна. Они действуют как кусачки, и крупной хищнице ничего не стоит пополам перекусить небольшого дельфина. От такой нагрузки зубы в передней рабочей шеренге быстро снашиваются и выпадают, но заботиться о вставных зубах им не приходится. У акул ползающие зубы.

[01.03]Описание верховки
Верховка маленькая рыбка. Похожа на маленькую уклейку, от которой отличается более широким туловищем и головой, короткой боковой линией (распространена на первые 2-12 чешуек). На голову заходит сеть чувствительных канальцев, расположенных группами: на верхней части, под глазами, на предкрышках. Тело умеренно длинное, сжатое с боков. Голова небольшая, коническая. Глаз сравнительно большой. Рот конечный, косой, направлен вверх, нижняя челюсть слегка входит в углубление верхней челюсти.


[01.04]Описание беркута
Беркут - самая большая птица из орлиного племени. Его смело можно назвать королем орлов. Это крупная и сильная птица весит от 3 до 6 килограммов. Размах крыльев у некоторых особей достигает трёх с половиной метров. Облик беркута типично орлиный, окраска тёмно-бурая. Когда он летит, то хорошо заметны белые пятна на крыльях и такое же основание хвоста. Очень просто отличить молодого беркута от старого. У молодых очень много белых пятен. Кстати, у беркута самый длинный хвост из всех орлов.

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

Описание лотоса

Людей издавна изумляла, радовала и притягивала красота цветков лотоса. Над поверхностью воды среди ярко-зелёных плавающих листьев распускается крупный (до 30 см диаметром) цветок. Жёлтый венчик окружён несколькими рядами нежных ярко-розовых или жёлтых лепестков. У основания их цвет более насыщенный, чем на кончиках.
Цветок лотоса всегда обращен к Солнцу, поэтому древние египтяне, индусы, китайцы обожествляли его, считали священным и загадочным растением. Цветки лотоса находили в древнеегипетских гробницах. Его изображения высечены в камне на древних памятниках архитектуры. В легендах и преданиях этих народов цветок лотоса всегда был символом красоты, мудрости и силы. Лотос - цветок богов, так считали древние индусы и египтяне. И не только из-за его красоты и обращенности к

То есть, от скобки ] до другой скобки [

Отправлено: 13:16, 01-02-2017

 

Ветеран


Contributor


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

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


Похоже задача не очень годится для решения в CMD. Возможны неприятности с спецсимволами типа !
Вот решение в CMD. Ограничения:
1. Заголовок должен быть в отдельной строке
2. Квадратные скобки не должны быть в другом тексте
Код: Выделить весь код
@Echo off
cls

Set "From=Z:\Box_In\Файл с содержимым.txt"
Set "To=Z:\Box_Out\Папка с содержимым"

SetLocal EnableExtensions EnableDelayedExpansion

Call :SubName "NameFile" "%From%"
Set "TFrom=%To%\%NameFile%.tmp"

Md "%To%" 2>nul
Del "%TFrom%" 2>nul

Set /A Count0=1000
Set /A Count1=%Count0%+1
Set /A CountN=Count0

FOR /F "usebackq delims=" %%k IN (`More "%From%"`) DO >>"%TFrom%" (Echo %%k)
FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "]" "%TFrom%"`) DO (
	Set /A CountN+=1
	Md "%To%\!CountN:~1,999!" 2>nul
)

FOR /L %%i IN (%CountN%,-1,%Count1%) DO (
	Set /A ToFile=%%i
	Set "ToFile=%To%\!ToFile:~1,999!\%NameFile%"
	FOR /F "usebackq Skip=2 delims=[]" %%n IN (`Find /N "]" "%TFrom%"`) DO Set /A j2=%%n & Set /A j1=%%n-1
	FOR /F "usebackq tokens=2* delims=]" %%s IN (`More +!j1! "%TFrom%"`) DO >"!ToFile!" (Echo %%s)
	FOR /F "usebackq delims=" %%s IN (`More +!j2! "%TFrom%"`) DO >>"!ToFile!" (Echo %%s)
	Call :Shrink "%TFrom%" !j2!
)

Del "%TFrom%" 2>nul
Del "%TFrom%.tmp" 2>nul

GoTo :Eof

:SubName
	Set "%~1=%~nx2"
GoTo :Eof

:Shrink
        Move /Y %1 "%~1.tmp" >nul
	Set /A kk=0
	FOR /F "usebackq delims=" %%k IN (`More "%~1.tmp"`) DO (
	        Set /A kk+=1
                If !kk! EQU %2 GoTo :Eof
		>>%1 (Echo %%k)
	)
GoTo :Eof
Вот vbs, здесь, как Вы заказывали, от скобки до скобки
Код: Выделить весь код
File_In = "Z:\Box_In\Файл с содержимым.txt"
Box_Out = "Z:\Box_Out\Папка с содержимым"

S1 = "]"
S2 = "["

Set FSO = CreateObject("Scripting.FileSystemObject")
Set NFile = FSO.OpenTextFile(File_In, 1, False)                     '  Открываем текстовый файл
S = NFile.ReadAll
NFile.Close

FName = FSO.GetFileName(File_In)
If Not FSO.FolderExists(Box_Out) Then FSO.CreateFolder (Box_Out)
N1 = 1
i = 10000
Do
    N1 = InStr(N1, S, S1) + 1
    If N1 = 1 Then Exit Do
    N2 = InStr(N1, S, S2) - 1
    If N2 = -1 Then N2 = Len(S)
    SS = Mid(S, N1, N2 - N1 + 1)
'    MsgBox SS
    N1 = N2 + 2
    i = i + 1
    DirName = Box_Out + "\" + Right(CStr(i), 3)
    If Not FSO.FolderExists(DirName) Then FSO.CreateFolder (DirName)
    Set NFile = FSO.OpenTextFile(DirName + "\" + FName, 2, True)    '  Открываем текстовый файл
    NFile.Write SS
    NFile.Close
Loop

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

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:05, 02-02-2017 | #2



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

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


Ветеран


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

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


Не совсем понял, что требуется, но примерно так (на WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim objFSO

Dim strContent

Dim objMatch

Dim iFolderCount
Dim strDestFile


strSourceFile = "C:\Мои проекты\0040\Source.txt"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With objFSO.OpenTextFile(strSourceFile)
	strContent = .ReadAll()
	.Close
End With

With WScript.CreateObject("VBScript.RegExp")
	.IgnoreCase = True
	.Global     = True
	.Pattern    = "\[\d+\.\d+\](.*)\r\n([\s\S]*?)(?=(\[|$))"
	
	If .Test(strContent) Then
		iFolderCount = 0
		
		For Each objMatch In .Execute(strContent)
			iFolderCount = iFolderCount + 1
			
			strDestFile = objFSO.BuildPath(CStr(iFolderCount), objMatch.Submatches.Item(0) & ".txt")
			
			If Not objFSO.FolderExists(CStr(iFolderCount)) Then
				objFSO.CreateFolder CStr(iFolderCount)
			End If
			
			With objFSO.CreateTextFile(strDestFile, True)
				.WriteLine objMatch.Submatches.Item(0)
				.WriteLine
				.Write objMatch.Submatches.Item(1)
				
				.Close
			End With
		Next
	End If
End With

Set objFSO = Nothing

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:30, 03-02-2017 | #3


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


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

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


Спасибо огромное. скрипты работают!

Отправлено: 08:38, 03-02-2017 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поместить каждый файл в одноименную папку. Metallor Скриптовые языки администрирования Windows 11 20-03-2022 00:59
CMD/BAT - [решено] можно ли батником разрезать файл по шаблону? ruslaw Скриптовые языки администрирования Windows 10 30-10-2021 19:05
CMD/BAT - [решено] Скопировать файл по шаблону kot488 Скриптовые языки администрирования Windows 1 20-12-2016 13:14
CMD/BAT - поиск строк по шаблону и запись в отдельный файл AVTS Скриптовые языки администрирования Windows 4 13-07-2012 00:51
CMD/BAT - [решено] *.bat файл на удаление папок по шаблону smol84 Скриптовые языки администрирования Windows 3 10-03-2009 15:49




 
Переход