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

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

Ответить
Настройки темы
PowerShell - Переименовать файлы XML

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


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

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


Суть вопроса такова:
Имеются куча файлов XML. Необходимо переименовать файлы по содержимому, типа "0000000_2016-01-01.xml".

Содержимое находится по таким путям:
$sDateCreateDoc = $oXmlDocument.KPT.CertificationDoc.Date
$sCadastralNumber = $oXmlDocument.KPT.CadastralBlocks.CadastralBlock
CadastralNumber - Выглядит типа 00:00:0000000
# разбить кадастровый номер на подстроки по ":"
$sCadastralNumberSplit = $sCadastralNumber -split ':'
# в итоге имеем следующие переменные:
$Cad_Region = $sCadastralNumberSplit[0]
$Cad_Rayion = $sCadastralNumberSplit[1]
$Cad_Kvartal = $sCadastralNumberSplit[2]
Как это реализовать, подскажите?

Отправлено: 14:12, 12-03-2017

 

Ветеран


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

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


Код: Выделить весь код
dir *.xml | ren -new {
	$kpt = ([xml](Get-Content $_.FullName)).KPT
	"{0}_{1}.xml" -f $kpt.CadastralBlocks.CadastralBlock.CadastralNumber.split(":")[-1],$kpt.CertificationDoc.Date
}

Последний раз редактировалось Kazun, 12-03-2017 в 17:26.

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

Отправлено: 17:19, 12-03-2017 | #2



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

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


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


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

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


не совсем то на что я надеялся. Думал по аналогии смогу сделать для других типов XML. а в этом коде я вообще не понимаю)))

Отправлено: 16:39, 13-03-2017 | #3


Ветеран


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

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


Так и делайте по аналогии для других.

Цитата al-1k:
а в этом коде я вообще не понимаю))) »
Получили командлетом Get-ChildItem набор файлов xml в текущем каталоге и передали его по конвейеру командлету Rename-Item. В качестве нового имени используется результат блока кода, в котором сначала читается содержимое очередного файла из набора, делается попытка преобразования полученного содержимого к типу System.Xml.XmlDocument и присвоение узла .KPT переменной. Затем по полученной переменной KPT, спускаясь по указанной Вами иерархии, получаем узел CadastralNumber, разбиваем его на части по символу ":" в массив, берём последний элемент полученного массива. Из той же переменной получаем узел Date. Оба полученных объекта форматируем в виде потребного имени файла.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:02, 13-03-2017 | #4


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


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

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


Цитата Iska:
получаем узел CadastralNumber, разбиваем его на части по символу ":" в массив, берём последний элемент полученного массива »
в этом и суть! необходимо для других типов xml, в которых CadastralNumber выглядит типа "00:00:0000000:123" необходимо переименовать по типу "0000000-123_2016-01-01"

Отправлено: 19:07, 13-03-2017 | #5


Ветеран


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

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


Код: Выделить весь код
PS > "00:00:0000000:123".replace(":","-").split("-",3)[-1]
0000000-123

PS > "00:00:0000000".replace(":","-").split("-",3)[-1]
0000000

$kpt.CadastralBlocks.CadastralBlock.CadastralNumber.replace(":","-").split("-",3)[-1]
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:18, 13-03-2017 | #6


Ветеран


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

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


al-1k, как я понимаю, Вам для начала надо самому определиться, как вообще может выглядеть CadastralNumber, каким правилам подчиняется его содержимое. Затем, основываясь на этих правилах, описать алгоритм образования имени файла из CadastralNumber. Полный алгоритм. Инако мы можем долго ходить по кругу, раз за разом выясняя всё новые нюансы.

Отправлено: 19:36, 13-03-2017 | #7


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


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

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


Круть!!! Шик!!! Блеск и красота!!! Осталось прикрутить что-нибудь, чтобы при дублирующихся файлах дописывалось "0000000-123_2016-01-01(2)" или вовсе удалялся дубль. Возможно?

Цитата Iska:
мы можем долго ходить по кругу, раз за разом выясняя всё новые нюансы »
В идеале было бы прикрутить код к этому коду http://dumpz.org/1278098/ если из него что-нибудь ясно

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


Ветеран


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

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


Цитата al-1k:
чтобы при дублирующихся файлах дописывалось "0000000-123_2016-01-01(2)" или вовсе удалялся дубль. »
Повторяю: определитесь.

Отправлено: 07:20, 14-03-2017 | #9


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


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

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


Цитата al-1k:
В идеале было бы прикрутить код к этому коду http://dumpz.org/1278098/ если из него что-нибудь ясно »
Вау. Удивлен увидеть свой код.
al-1k, Опишите подробно цели и задачи своего скрипта. Мой по прежнему работает, уже с ЕГРН.

Последняя версия моего монстра
http://dumpz.org/2536094/
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:41, 13-04-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименовать файлы в папке zion87 Скриптовые языки администрирования Windows 4 05-01-2020 01:11
VBS/WSH/JS - Переименовать файлы (заменить часть имени) Fresh96 Скриптовые языки администрирования Windows 4 15-01-2014 18:26
CMD/BAT - Переименовать и переместить файлы vider Скриптовые языки администрирования Windows 7 12-05-2013 16:35
Интерфейс - Переименовать файлы при совпадении Папуас Скриптовые языки администрирования Windows 2 19-10-2010 23:56
Как переименовать системные файлы Centrinar AutoIt 13 11-07-2010 21:54




 
Переход