Показать полную графическую версию : Замена строки в файлах на powershell или bat
sap87@vk
02-10-2019, 08:11
Привет всем. Искал по форумам то что нужно, но все не то что-то.
Есть папка лежит на диске С в корне ну допустим c:\123\.
В нее переодический с разными именами скидывают xml в файлы. В которых есть путь на таблицу стилей допустим http://yandex.ru/common.css. и на компе есть папка с:\css где лежат эти файлы .
Задача состоит в том чтобы заменить во всех xml строку с путем и открыть их.
Спасибо всем за помощь заранее . Ps можно конечно и на bat но как то устарело
greg zakharov
02-10-2019, 10:14
sap87@vk, хорошо, что вы что-то допускаете. А что если вам скажут, допустим XML может значения предоставлять не только между парой открывающих и закрывающих тэгов, но и в одиночном замыкающем тэге, что тогда? Как прикажете разбирать XML без примера с вашей стороны, ммм? Чтобы стало понятно:
<?xml version="1.0"?>
<Root>
<PairValue>https://some.domain.org/wipe_your_ass_with_sandpaper</PairValue>
<SelfClosed Url="https://another.domain.org/do_your_dick_with_vacuum_cleaner" />
</Root>
Что касается бать, все не столько устарело, сколько велико ограничение на длину строки. Хотя никто и ничто не мешает разобрать XML посредством сторонних утилит, вроде xmlstarlet или sed.
sap87@vk
02-10-2019, 11:34
greg zakharov, xml приходит в одном формате но с разными имена ми и содержимым.
суть в чем к нему привязана таблица стилей она находиться в интернете. Те у кого есть фаил открывается норм. Соотвественно я слил таблицу стилей и выложил ее локально но файлы которые приходят надо переделывать. сейчас напишу шапку
<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl"
href="https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Ods/07/Common.xsl"?><Extract>
соотвествено меняться будет https://portal.rosreestr.ru/xsl/EGRP/Reestr_Extract_Ods/07/Common.xsl на c:/rossreestr/css/Common.xsl
greg zakharov
02-10-2019, 22:17
В pwsh задача может быть решена так:
$x = [xml](gc X:\path\input.xml)
$x.'xml-stylesheet' = $x.'xml-stylesheet' -replace '(href=\").+(/Common.xml\")', '$1c:/rossreestr/css$2'
$x.Save(X:\path\input.xml)
sap87@vk
03-10-2019, 08:18
greg zakharov, как я понял надо будет xml фаил переименовывать в input
К сожалению ошибка
PS C:\Users\086semenovap> C:\Users\086semenovap\Desktop\БезИмени1.ps1
Отсутствует ")" в вызове метода.
C:\Users\086semenovap\Desktop\БезИмени1.ps1:4 знак:9
+ $x.Save( <<<< C:\rossreestr\input2.xml)
+ CategoryInfo : ParserError: (CloseParenToken:TokenId)
[], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndParenthesisInMethodCall
greg zakharov
03-10-2019, 09:30
надо будет xml фаил переименовывать в input
Пардон, зачем? Вы же догадались, что X:\path всего-навсего пример пути, так и с XML - имя может быть любым. Что до выброшенного хостом pwsh исключения, там же четко написано: "нет парной закрывающей скобки". И кстати, при вызове метода Save имя файла, куда происходит сохранение, должно быть взято в кавычки (мой косяк). В смысле:
...
$x.Save("X:\path\input.xml")
sap87@vk
03-10-2019, 10:40
проблема в том что имя приходят рендомно сгененировано из цифер и букв. так то не проблема с прееименованием. удобнее если бы скрипт сам просматривал все xml файлы в папке.
А вторая проблема кодировка слетает
https://a.radikal.ru/a24/1910/c6/f317109f3d15.png
https://c.radikal.ru/c19/1910/fd/6c535c29e9b0.png
greg zakharov
03-10-2019, 11:47
sap87@vk, файлы в кодировке utf8, так что явно нужно задать:
$x = [xml](gc X:\path\input.xml -enc utf8)
...
И будет вам счастье. Хотя можно автоматизировать распознавание кодировки для Get-Content (он же gc).
Что касается "цифер", разуметь шаблон имен по одному скриншоту выше моего черного пояса по телепатии. Вы бы описали задачу от и до. И, к слову, вы же госслужащий, судя по документообороту, вас приняли на работу за диплом или знания?
sap87@vk
03-10-2019, 12:51
Знания. Просто пока некогда занятся изучением скриптовых языков. В работе требуется очень редко. Точнее почти некогда.
greg zakharov, сделайте ему так, чтобы можно было xml-файл мышкой на скрипт перетаскивать.
sap87@vk
04-10-2019, 07:22
Не плохо было бы чтоб сразу фаил открывался.
greg zakharov
04-10-2019, 16:58
Не плохо было бы чтоб сразу фаил открывался.А также вина красного, да бабу рыжую... Если сойдемся на трех сотнях, обещаю не рассказывать вашему начальству о ваших форумных постах, а скрипт приложить бонусом. Дерзайте!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.