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

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

Ответить
Настройки темы
CMD/BAT - [решено] Замена строк в файле формата .xml

Аватара для TheLeon

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


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


Конфигурация

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


Изменения
Автор: TheLeon
Дата: 08-05-2018
Здравствуйте, уважаемые форумчане OSZone.net. Нужна помощь, а именно:
в файле, например, "example.xml" нужно найти и заменить строку "<MediaPath Path="Media" />" на "<MediaPath Path="Media" /><MediaPath Path="Vehicles" />" (второе пункт, "Vehicles", со следующей строчки). Возможно ли это сделать через .bat файл?

Файл 152439

Отправлено: 18:54, 08-05-2018

 

Ветеран


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

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


TheLeon, зависит от содержимого файла. Надёжнее использовать WSH/PowerShell.

Упакуйте оригинальный файл .xml и откорректированный файл .xml в архив и приложите к сообщению.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:06, 08-05-2018 | #2



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

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


Ветеран


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

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


Это не вполне XML.

На PowerShell:
Код: Выделить весь код
$sSourceFile = 'C:\Мои проекты\0153\config.xml'

if(Test-Path -Path $sSourceFile -PathType Leaf) {
    $oXml = [xml](Get-Content -Path $sSourceFile)

    if($oXml.SelectSingleNode("/Config/MediaPath[@Path='Vehicles']") -isnot [System.Xml.XmlElement]) {
        [System.Xml.XmlElement]$oXmlElement = $oXml.CreateElement('MediaPath')
        $oXmlElement.SetAttribute('Path', 'Vehicles') | Out-Null
        $oXml.SelectSingleNode("/Config").AppendChild($oXmlElement) | Out-Null
    }

    $oXml.Save($sSourceFile)
} else {
    Write-Host "Can't find source file [$sSourceFile]." -ForegroundColor Red
}
Если у корневого узла Config нет дочернего узла MediaPath с атрибутом Path со значением Vehicles, то последний будет добавлен.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 08-05-2018 | #3


Аватара для TheLeon

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


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

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


Iska, здравствуйте ещё раз, на счёт оболочки PowerShell, т.е. каждому придётся менять политику PowerShell(а то по-умолчанию: блокирует все скрипты), без этого ограничения никак сделать нельзя, верно? Или можно, например, через батник изменить политику(если возможно) и потом уже запустить сам скрипт?

Отправлено: 07:43, 09-05-2018 | #4


Ветеран


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

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


TheLeon, ну, вот Вам на WSH:
Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim objXMLDOMNode
Dim objXMLDOMElement


strSourceFile = "C:\Мои проекты\0153\config.xml"

If WScript.CreateObject("Scripting.FileSystemObject").FileExists(strSourceFile) Then
	With WScript.CreateObject("MSXML2.DOMDocument")
		If .load(strSourceFile) Then
			Set objXMLDOMNode = .SelectSingleNode("/Config/MediaPath[@Path='Vehicles']")
			
			If objXMLDOMNode Is Nothing Then
				Set objXMLDOMElement = .CreateElement("MediaPath")
				objXMLDOMElement.SetAttribute "Path", "Vehicles"
				.SelectSingleNode("/Config").appendChild objXMLDOMElement
				Set objXMLDOMElement = Nothing
				
				.save strSourceFile
			Else
				Set objXMLDOMNode = Nothing
			End If
		Else
			WScript.Echo "Can't load source file [" & strSourceFile & "]."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Can't find source file [" & strSourceFile & "]."
	WScript.Quit 1
End If

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

Отправлено: 12:13, 09-05-2018 | #5


Аватара для TheLeon

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


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

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


Iska, опять проблема, вроде пытаюсь запустить, но выдает ошибку, что не может найти "Config.xml" - это из-за того(наверно), что я поставил вместо "strSourceFile = "С:/.../config.xml"" на "strSourceFile = "config.xml"", т.е. надо ставить полный путь? (извиняюсь за тупость, просто ни разу не пользовался подобными средствами).
-
P.S: Задумка была такова: установщик(созданный на Inno Setup) заканчивает установку основных файлов для игры, затем запускается батник(или подобное) и прописывает дополнительные строчки (например, "<MediaPath Path="Vehicles" />") в конфигурационном файле(это для того, чтобы папка тоже была задействована при запуске игрушки).

Отправлено: 18:06, 09-05-2018 | #6


Ветеран


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

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


Цитата TheLeon:
т.е. надо ставить полный путь? »
Желательно.

Цитата TheLeon:
P.S: Задумка была такова: установщик(созданный на Inno Setup) заканчивает установку основных файлов для игры, затем запускается батник(или подобное) и прописывает дополнительные строчки (например, "<MediaPath Path="Vehicles" />") в конфигурационном файле »
В зависимости от чего прописывает «дополнительные строчки»? Как Вы определяете, какие именно строки требуется добавлять? Или не добавлять? Иными словами говоря, зачем что-то добавлять вместо того, чтобы извлекать готовый файл с уже сразу добавленными параметрами?

Цитата TheLeon:
это для того, чтобы папка тоже была задействована при запуске игрушки »
Поясните?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 09-05-2018 | #7


Аватара для TheLeon

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


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

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


Iska, как-то не подумал о готовом файле, спасибо за помощь и извините, что занял ваше время.

Отправлено: 14:14, 10-05-2018 | #8


Ветеран


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

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


TheLeon, нет, ну, если у Вас действительно в зависимости от каких-то параметров инсталляции в случае а) добавляется одно, в случае б) добавляется другое, в случае в) добавляется первое и третье, а в случае г) не добавляется ничего — тогда, действительно, имеет смысл именно корректировать файл (причём, прямо из-под инсталляции, посредством встроенного языка), а не делать кучу готовых файлов на все случаи жизни.

Отправлено: 14:38, 10-05-2018 | #9


Аватара для TheLeon

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


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

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


Iska, а, слушайте: я задал вопрос о скрипте потому, что этот файл (config.xml), мог уже до начала установки редактирован, т.е. уже были добавленные какие-нибудь строчки, вот я и хотел с помощью скрипта добавить свои строчки в этот файл, автоматизированно.
-
Каждая строчка отвечала за подгрузку файлов для игры, от стандартных до кастомных(моды).
-
И тут появляется опять проблема, как поставить путь до файла, в соответствие с настройками пользователя(смотря какой он путь выбрал).

Отправлено: 14:42, 10-05-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] замена значения в xml-файле firstarey Скриптовые языки администрирования Windows 20 13-11-2017 11:24
CMD/BAT - Замена строк в файле по признаку и маске ВиталийВ Скриптовые языки администрирования Windows 12 13-09-2015 07:54
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки SharkyEXE Скриптовые языки администрирования Windows 6 02-03-2015 15:42
CMD/BAT - замена слов в XML файле danishru Скриптовые языки администрирования Windows 0 09-02-2014 01:06
CMD/BAT - Замена нескольких строк в файле bcubbs@fb Скриптовые языки администрирования Windows 3 24-01-2013 14:01




 
Переход