Имя пользователя:
Пароль:
 | Правила  

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

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

Пользователь


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

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


Есть один текстовый файл (file.txt) в котором заключена информация на несколько html-файлов.
Примерно такой:
-------------------------------------------
<html>
<title>1</title>
<body>
1111111111
</body>
</html>
<html>
<title>2</title>
<body>
2222222222
</body>
</html>
<html>
<title>3</title>
<body>
3333333333
</body>
</html>
..........
<html>
<title>x</title>
<body>
xxxxxxxxxx
</body>
</html>
-------------------------------------------
как превратить его средствами bat-файлов (если можно) в несколько html-файлов: 1.htm, 2.htm, 3.htm .... x.htm

Отправлено: 18:14, 27-09-2013

 

Ветеран


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

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


Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim objFSO
Dim strContent

Dim objRegExp
Dim objMatch

Dim strNewFileName

If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strSourceFile) Then
			With .OpenTextFile(strSourceFile)
				strContent = .ReadAll()
				.Close
			End With
			
			Set objRegExp = WScript.CreateObject("VBScript.RegExp")
			
			With objRegExp
				.Pattern = "<html>[\s\S]*?<title>([\s\S]*?)</title>[\s\S]*?</html>"
				.Global = True
			End With
			
			If objRegExp.Test(strContent) Then
				For Each objMatch In objRegExp.Execute(strContent)
					strNewFileName = .BuildPath(.GetParentFolderName(strSourceFile), objMatch.SubMatches(0) & ".htm")
					WScript.Echo "Create file [" & strNewFileName & "]."
					
					With .CreateTextFile(strNewFileName)
						.WriteLine objMatch.Value
						.Close
					End With
				Next
			Else
				WScript.Echo "No matches"
			End If
		Else
			WScript.Echo "Source file [" & strSourceFile & "] not found."
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source file>"
End If

WScript.Quit 0
Сохраните код в файл с расширением «.vbs», затем просто перетащите на него Ваш «один текстовый файл (file.txt)».

P.S. Никаких проверок на содержимое внутри тэга «title» не делается. Посему, ежели там окажется какой-либо запрещённый в именах файлов символ, например «:», скрипт завершится с ошибкой.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:40, 27-09-2013 | #2



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

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


Пользователь


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

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


Фантастика!
Огромнейшее спасибо, работает!

Отправлено: 21:37, 27-09-2013 | #3


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


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

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


Здравствуйте,.
Как прочитать текстовый файл (file.txt) из скрипта, не перетаскивая его

Отправлено: 12:05, 29-10-2021 | #4


Ветеран


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

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


Цитата Pet20211029:
не перетаскивая его »
а к чему его перетаскивать, в рамках задачи:
Код: Выделить весь код
more file.txt
что еще надо?

Отправлено: 14:05, 29-10-2021 | #5


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


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

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


Писал про скрипт выше, от Iska.
Он пишет:
Сохраните код в файл с расширением «.vbs», затем просто перетащите на него Ваш «один текстовый файл (file.txt)».
Как его модифицировать?

Отправлено: 14:17, 29-10-2021 | #6


Аватара для Fors1k

Старожил


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

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


Код: Выделить весь код
cls
$pathIn  = "D:\file.txt"
$pathOut = "D:\htmlDocs"

[Regex]::Matches((gc $pathIn -Raw), "<html>.*?</html>", 0x10).Value|ForEach{$i=1}{
    $_|Out-File "$pathOut\$i.htm";$i++
}
 
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:02, 29-10-2021 | #7


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


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

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


Выдает ошибку Недопустимый знак " Строка 4"

Отправлено: 15:23, 29-10-2021 | #8


Ветеран


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

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


Pet20211029, это код для PowerShell, если что.

Отправлено: 15:27, 29-10-2021 | #9


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


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

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


Спасибо, все же надо в vbs

Отправлено: 15:33, 29-10-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Можно ли подправить INF-файл? TheFlash Поиск драйверов, прошивок и руководств 18 06-03-2013 19:36
CMD/BAT - поиск строк по шаблону и запись в отдельный файл AVTS Скриптовые языки администрирования Windows 4 13-07-2012 00:51
CMD/BAT - [решено] *.bat файл на удаление папок по шаблону smol84 Скриптовые языки администрирования Windows 3 10-03-2009 15:49
Можно ли при помощи PHP скачать файл по ссылке вида http://xxxx? (+) Igor_I Вебмастеру 2 12-09-2005 21:31
Как разрезать файл 700-800 МВ на несколько частей gormark Хочу все знать 6 31-08-2005 07:41




 
Переход