Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Замена строки в файлах на powershell или bat (http://forum.oszone.net/showthread.php?t=342407)

sap87@vk 02-10-2019 08:11 2890440

Замена строки в файлах на powershell или bat
 
Привет всем. Искал по форумам то что нужно, но все не то что-то.
Есть папка лежит на диске С в корне ну допустим c:\123\.
В нее переодический с разными именами скидывают xml в файлы. В которых есть путь на таблицу стилей допустим http://yandex.ru/common.css. и на компе есть папка с:\css где лежат эти файлы .

Задача состоит в том чтобы заменить во всех xml строку с путем и открыть их.

Спасибо всем за помощь заранее . Ps можно конечно и на bat но как то устарело

greg zakharov 02-10-2019 10:14 2890451

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 2890460

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.../07/Common.xsl на c:/rossreestr/css/Common.xsl

greg zakharov 02-10-2019 22:17 2890534

В 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 2890560

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 2890567

Цитата:

Цитата sap87@vk
надо будет xml фаил переименовывать в input

Пардон, зачем? Вы же догадались, что X:\path всего-навсего пример пути, так и с XML - имя может быть любым. Что до выброшенного хостом pwsh исключения, там же четко написано: "нет парной закрывающей скобки". И кстати, при вызове метода Save имя файла, куда происходит сохранение, должно быть взято в кавычки (мой косяк). В смысле:
Код:

...
$x.Save("X:\path\input.xml")


sap87@vk 03-10-2019 10:40 2890577

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

А вторая проблема кодировка слетает
Скрытый текст


greg zakharov 03-10-2019 11:47 2890587

sap87@vk, файлы в кодировке utf8, так что явно нужно задать:
Код:

$x = [xml](gc X:\path\input.xml -enc utf8)
...

И будет вам счастье. Хотя можно автоматизировать распознавание кодировки для Get-Content (он же gc).
Что касается "цифер", разуметь шаблон имен по одному скриншоту выше моего черного пояса по телепатии. Вы бы описали задачу от и до. И, к слову, вы же госслужащий, судя по документообороту, вас приняли на работу за диплом или знания?

sap87@vk 03-10-2019 12:51 2890599

Знания. Просто пока некогда занятся изучением скриптовых языков. В работе требуется очень редко. Точнее почти некогда.

Iska 03-10-2019 19:34 2890634

greg zakharov, сделайте ему так, чтобы можно было xml-файл мышкой на скрипт перетаскивать.

sap87@vk 04-10-2019 07:22 2890663

Не плохо было бы чтоб сразу фаил открывался.

greg zakharov 04-10-2019 16:58 2890707

Цитата:

Цитата sap87@vk
Не плохо было бы чтоб сразу фаил открывался.

А также вина красного, да бабу рыжую... Если сойдемся на трех сотнях, обещаю не рассказывать вашему начальству о ваших форумных постах, а скрипт приложить бонусом. Дерзайте!


Время: 07:13.

Время: 07:13.
© OSzone.net 2001-