Войти

Показать полную графическую версию : [решено] разбить файл на много файлов по шаблону и каждый файл положить в папку


Mezolick
01-02-2017, 13:16
Здравствуйте, я не силен в батниках помогите пожалуйста.

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

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

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

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


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

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

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

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

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

megaloman
02-02-2017, 20:05
Похоже задача не очень годится для решения в CMD. Возможны неприятности с спецсимволами типа !
@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

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

Iska
03-02-2017, 00:30
Не совсем понял, что требуется, но примерно так (на 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

Mezolick
03-02-2017, 08:38
Спасибо огромное. скрипты работают!




© OSzone.net 2001-2012