Войти

Показать полную графическую версию : Поиск и удаление через bat


ivan456
16-11-2022, 08:39
Всем привет.
Какой день ломаю голову, не могу понять как удалить текст в xml файле в автоматическом режиме через cmd/bat
Пример:
<txt>какой_то_text_252.255.1</txt>
1. Весь код в одну строку.
2. нужно найти text
3. удалить целиком от <txt> и до</txt> в том числе что внутри.

так же ещё не могу понять как не заменяя каждый раз, удалить в реестре значение в параметре REG_MULTI_SZ тоже через bat.
Я так понимаю надо вначале найти, потом взять целиком значение, в нем найти, удалить, и после добавить.
вот только в коде не пойму как это реализовать. С простой заменой и удалением я вроде справился, а с этим затуп полный. Кучу времени потратил, а результат ноль.

P.S. Извините, если возможно такая тема была, не смог найти нужное решение своей проблемы.

DJ Mogarych
16-11-2022, 09:24
CMD не предназначена для работы с XML. Используйте инструменты, которые умеют работать с этим типом данных.

Powershell:

$src = "D:\temp\input.xml"
$dest = "D:\temp\output.xml"
$toDel = "txt"

$xml = [xml](gc $src)
$nodes = $xml.SelectNodes("//$toDel")
foreach ($node in $nodes) {$node.ParentNode.RemoveChild($node) > $null}
$xml.Save($dest)

ivan456
16-11-2022, 09:53
Не работает код, сохраняет новый файл, но уже разбивает по строкам.
CMD не предназначена для работы с XML. Используйте инструменты, которые умеют работать с этим типом данных.
$src = "D:\temp\input.xml"
$dest = "D:\temp\output.xml"
$toDel = "txt"
$xml = [xml](gc $src)
$nodes = $xml.SelectNodes("//$toDel")
foreach ($node in $nodes) {$node.ParentNode.RemoveChild($node) > $null}
$xml.Save($dest) »

в файле xml много такого в одну строку:
<txt>какой_то_text1_252.255.1</txt><txt>какой_то_text2_252.255.1</txt><txt>какой_то_text3_252.255.1</txt>
Нужно только удалить например <txt>какой_то_text1_252.255.1</txt>

ivan456
16-11-2022, 12:20
А если его в txt переделать? это по сути txt только в xml формате
CMD не предназначена для работы с XML »

megaloman
16-11-2022, 12:27
ivan456, Либо заархивируйте Ваш файл, либо переименуйте его в .txt. Приложите его к сообщению. Надо видеть структуру файла и его кодировку. CMD с UTF скорее всего не отработает.

ivan456
16-11-2022, 12:43
Он в ANSI. там ничего кроме того что я описал выше нет.
Единственное всё в одну строку и с <file>text.111.222_13</file>
Надо понимать что поиск не по полному названию идет, а по сокращению, да полное название известно, но каждый раз менять эти циферки напряжно будет.
Либо заархивируйте Ваш файл, либо переименуйте его в .txt. Приложите его к сообщению. Надо видеть структуру файла и его кодировку. CMD с UTF скорее всего не отработает. »

При простом поиске текста в файле через cmd, пишет что слишком длинная строка. Обычно ищут строки, а тут как бы строка одна большая. Длинной в 78тыс знаков))

ivan456
16-11-2022, 13:18
Хотя конечно можно разбить на строки автоматически, найти что нужно, удалить, а после назад в одну строку сделать и сохранить в новый файл.




© OSzone.net 2001-2012