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

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

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

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


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

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


Изменения
Автор: temphard
Дата: 26-03-2017
Доброго времени суток.
Существует файл 1.txt. В нем содержится много текста (html код).
Необходимо найти определенные части текста и скопировать их в файл 2.txt построчно.
Пример части текста
Цитата:
<url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>
Перед этим текстом и после него находится еще очень много другого текста.

Более конкретней:
Вот эта часть: <url><loc>https://mysite.com/files/ никогда не меняется.
Вот эта часть: promo-category-copy/12345 всегда меняется.
Вот эта часть: </loc><lastmod> никогда не меняется.

Задача:
Найти эту часть: promo-category-copy/12345 скопировать ее и вставить в отдельную строку файла 2.txt.
Затем найти следующую такую же часть текста, скопировать ее и вставить в отдельную строку файла 2.txt и так далее.
Если с помощью CMD/BAT такая задача в принципе не возможна, то вполне подойдет VBS.

Заранее благодарен.

Здесь образец:
http://forum.oszone.net/attachment.p...4&d=1490531050

Условие:
Необходимо найти информацию, которая всегда содержится между этим uploader info=" и этим "> текстом (в данном случае это ссылка), скопировать ее и вставить в файл 2.txt в одной строке и так далее.
Спасибо.

Отправлено: 00:30, 26-03-2017

 

Старожил


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

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


temphard, *.vbs попробуйте. )))

Отправлено: 23:07, 26-03-2017 | #11



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

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


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


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

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


Цитата glukin:
vbs попробуйте »
Спасибо, попробовал, вроде работает.
А если нужная для поиска ссылка обрамлена вот так <url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>, то какие параметры поиска необходимо указывать?
Хочу вникнуть в суть, чтобы в дальнейшем быть независимым в этом вопросе

Отправлено: 23:20, 26-03-2017 | #12


Ветеран


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

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


Цитата temphard:
Что делать дальше? »
Использовать расширение «.vbs». Это VBScript.

WSH — Windows Script Host, сервер сценариев для Windows. По умолчанию поставляется в комплекте с двумя языками — VBScript и JScript, но в принципе может быть расширен и другими языками со стороны. «.wsh» — расширение для файла описания сценария.

Цитата temphard:
А если нужная для поиска ссылка обрамлена вот так <url><loc>https://mysite.com/files/promo-category-copy/12345</loc><lastmod>, то какие параметры поиска необходимо указывать? »
Нужно видеть полную структуру файла xml. По куску текста сказать ничего нельзя.

Отправлено: 23:20, 26-03-2017 | #13


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


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

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


Цитата Iska:
Нужно видеть полную структуру файла xml »
Файл 144505
Здесь полный файл xml.
В нем много разных ссылок, но нужно найти и скопировать например только такие ссылки: https://3docean.net/item/mini-cooper-rev/17352183, то есть у которых обязательно присутствует вот эта часть: https://3docean.net/item/

Последний раз редактировалось temphard, 27-03-2017 в 01:22.


Отправлено: 23:38, 26-03-2017 | #14


Ветеран


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

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


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

Dim strSourceFile
Dim strDestFile

Dim objFSO

Dim objXMLDOMSelection
Dim objXMLDOMElement


strSourceFile = "C:\Мои проекты\0054\02.txt"
strDestFile   = "C:\Мои проекты\0054\Result.txt"

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

If objFSO.FileExists(strSourceFile) Then
	With WScript.CreateObject("Microsoft.XMLDOM")
		.load strSourceFile
		
		Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")
		
		If Not objXMLDOMSelection Is Nothing Then
			With objFSO.CreateTextFile(strDestFile, True)
				For Each objXMLDOMElement In objXMLDOMSelection
					.WriteLine objXMLDOMElement.text
				Next
				
				.Close
			End With
		End If
		
		Set objXMLDOMSelection = Nothing
	End With
Else
	WScript.Echo "Can't find source file [" & strSourceFile & "]."
	WScript.Quit 1
End If

Set objFSO = Nothing

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

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


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


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

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


Цитата Iska:
Скрытый текст »
Шикарно, спасибо.
Воспользовавшись XML Notepad понял, как формируется вот эта строка скрипта
Код: Выделить весь код
Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")
Все работает, и кстати быстро.
И еще:
Можно ли воспользоваться данным скриптом пакетно?
Например каким образом указать, чтобы скрипт обработал последовательно все файлы в определенном каталоге и записал нужную информацию в один файл?

Последний раз редактировалось temphard, 27-03-2017 в 01:22.


Отправлено: 00:37, 27-03-2017 | #16


Ветеран


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

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


Цитата temphard:
Можно ли воспользоваться данным скриптом пакетно?
Например каким образом указать, чтобы скрипт обработал последовательно все файлы в определенном каталоге и записал нужную информацию в один файл? »
Данный код изначально не предполагался для подобного использования. Посему — никак.

На WSH:
Скрытый текст
Код: Выделить весь код
Option Explicit

Const strDestFile = "Result.txt"


Dim strSourceFolder

Dim objFSO
Dim objTS
Dim objFile

Dim objXMLDOMSelection
Dim objXMLDOMElement


If WScript.Arguments.Count = 1 Then
	strSourceFolder = WScript.Arguments.Item(0)
	
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	
	If objFSO.FolderExists(strSourceFolder) Then
		Set objTS = objFSO.CreateTextFile(strDestFile, True)
		
		With WScript.CreateObject("Microsoft.XMLDOM")
			For Each objFile In objFSO.GetFolder(strSourceFolder).Files
				If StrComp(objFSO.GetExtensionName(objFile.Name), "xml", vbTextCompare) = 0 Then
					.load objFile.Path
					
					Set objXMLDOMSelection = .selectNodes("/urlset/url/loc")
					
					If Not objXMLDOMSelection Is Nothing Then
						For Each objXMLDOMElement In objXMLDOMSelection
							objTS.WriteLine objXMLDOMElement.text
						Next
					End If
					
					Set objXMLDOMSelection = Nothing
				End If
			Next
		End With
		
		objTS.Close
		Set objTS = Nothing
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
	
	Set objFSO = Nothing
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
	WScript.Quit 1
End If

WScript.Quit 0

Исходный каталог указывается аргументом скрипта (можно также просто перетянуть исходную папку на скрипт в Проводнике). Обработке подлежат только файлы с расширением .xml, все прочие игнорируются. Результат записывается в текущий каталог в файл Result.txt.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:57, 27-03-2017 | #17


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


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

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


Цитата Iska:
Цитата:
Исходный каталог указывается аргументом скрипта
То есть вместо значения <Source folder> нельзя указать нужный каталог? Я уже попробовал, но не работает.
Вы уж извините, но понятие: аргументы в скриптах для меня еще темный лес.
Цитата:
можно также просто перетянуть исходную папку на скрипт в Проводнике
Воспользовался этим советом - работает!
В любом случае огромная благодарность. Скрипт главную задачу выполняет, вопрос решен!

Отправлено: 03:33, 27-03-2017 | #18


Ветеран


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

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


Цитата temphard:
То есть вместо значения <Source folder> нельзя указать нужный каталог? Я уже попробовал, но не работает. »
Можно, конечно, и напрямую в коде указывать (подправив сам код), но это не рационально.

Отправлено: 05:44, 27-03-2017 | #19


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


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

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


Ребят, не силен в программировании, поэтому искал более простой путь и он такой:
Запускаем cmd и пишем
Код: Выделить весь код
findstr /C:"<loc>" file.xml > url.txt
имеем на выходе за пару секунд текстовый файл с построчными ссылками в виде <loc>www.com</loc>

Отправлено: 23:07, 08-11-2017 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Скопировать в папку, зная только часть ее Имени magarjoba Скриптовые языки администрирования Windows 9 15-02-2017 11:12
Любой язык - Скопировать часть блоков из одного текстового файла в другой Alexander_88 Скриптовые языки администрирования Windows 4 19-02-2016 14:59
Прочие БД - Нечитается часть текста в Oracle11g slenok Программирование и базы данных 1 02-05-2010 23:16
[решено] Как скопировать фрагмент текста из файла PDF Antonij Хочу все знать 12 04-02-2009 06:49
windows2003 вырезать часть лога Angel_Keeper Microsoft Windows NT/2000/2003 2 05-12-2007 13:42




 
Переход