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

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

Ответить
Настройки темы
PowerShell - [решено] Переименование XML по содержанию файла.

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


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

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


подскажите как переименовать папку xml файлов по определенному xpath.
Код: Выделить весь код
Cls

$OriginalLocation = "C:\xml\"

$AddressXPath = "/Extract/ReestrExtract/ExtractObjectRight/ExtractObject/ObjectDesc/Address/Content"

if (Test-Path($OriginalLocation))
{


Select-Xml -Path (Get-ChildItem -Recurse -Path $OriginalLocation -Include @("*.xml") | where {! $_.PSIsContainer}) -Xpath $AddressXPath | ForEach-Object -Process {
$Address = $_.Node.InnerText.ToString()
$OriginalFullname = $_.Path
$NewFilename = $Address + ".xml"
Rename-Item -Path $OriginalFullname -NewName $NewFilename -Verbose

}

}
выдает ошибку:
Код: Выделить весь код
Rename-Item : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
строка:8 знак:12
+ Rename-Item <<<<  -Path $OriginalFullname -NewName $NewFilename -Verbose
    + CategoryInfo          : WriteError: (C:\xml\1 - копия.xml:String) [Rename-Item], IOException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
тут на форуме гдето нашел что надо применить Dispose(), но я не знаю как его применить правильно.

Отправлено: 11:51, 15-08-2017

 

Ветеран


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

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


Скачать handle - https://docs.microsoft.com/en-us/sys...wnloads/handle и посмотреть, какой процесс держит файл.

Код: Выделить весь код
PS > & 'D:\handle.exe' -nobanner "C:\xml\1 - копия.xml"
powershell.exe     pid: 13120  type: File           E40: C:\xml\1 - копия.xml
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:09, 15-08-2017 | #2



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

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


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


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

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


если перед переименованием вставить строчку & 'D:\handle.exe' -nobanner "C:\xml\1.xml" то
Код: Выделить весь код
powershell.exe     pid: 5636   type: File           3B8: C:\xml\1.xml
ПОДРОБНО: Выполнение операции "Переименование файла" над целевым объектом "Элемент: C:\xml\1.xml Назначение:
C:\xml\ул Чайковского, д 15, кв 67.xml".
Rename-Item : Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
строка:8 знак:12
+ Rename-Item <<<<  -Path $OriginalFullname -NewName $NewFilename -Verbose
    + CategoryInfo          : WriteError: (C:\xml\1.xml:String) [Rename-Item], IOException
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
если сразу после запустить. то
Код: Выделить весь код
PS & 'D:\handle.exe' -nobanner "C:\xml\1.xml"
No matching handles found.

Отправлено: 12:59, 15-08-2017 | #3


Ветеран


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

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


Код: Выделить весь код
$OriginalLocation = "C:\xml\"

$AddressXPath = "/Extract/ReestrExtract/ExtractObjectRight/ExtractObject/ObjectDesc/Address/Content"

if (Test-Path $OriginalLocation)
{
	$obj = Select-Xml -Path (Get-ChildItem -Recurse -Path $OriginalLocation -Include @("*.xml") | where {! $_.PSIsContainer}) -Xpath $AddressXPath | Select Path,@{n="Address";e={$_.Node.InnerText.ToString()}}
	foreach($i in $obj)
	{
		Rename-Item -Path $i.Path -NewName $i.Address -Verbose
	}
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 15-08-2017 | #4


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


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

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


спасибо большое. подскажите еще как сделать чтоб расширение xml добавлял. а то сейчас просто адресс без расширения.

Отправлено: 13:26, 15-08-2017 | #5


Ветеран


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

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


Код: Выделить весь код
Rename-Item -Path $i.Path -NewName "$($i.Address).xml" -Verbose
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 15-08-2017 | #6


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


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

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


а можно чтобы символы запрещенные в имени файлов заменялись на тире. а то они не переименовываются.

Отправлено: 09:48, 18-01-2018 | #7


Ветеран


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

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


Код: Выделить весь код
$file = "$($i.Address).xml"
[IO.Path]::GetInvalidFileNameChars() + [IO.Path]::GetInvalidPathChars() | Foreach {
	$file = $file.Replace($_,"-")
}

Rename-Item -Path $i.Path -NewName $file -Verbose
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:59, 18-01-2018 | #8


Ветеран


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

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


Цитата Kazun:
[IO.Path]::GetInvalidFileNameChars() + [IO.Path]::GetInvalidPathChars() »
Ух ты!

Отправлено: 10:07, 18-01-2018 | #9


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


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

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


Цитата Kazun:
$file = "$($i.Address).xml"
[IO.Path]::GetInvalidFileNameChars() + [IO.Path]::GetInvalidPathChars() | Foreach {
$file = $file.Replace($_,"-")
}
Rename-Item -Path $i.Path -NewName $file -Verbose »
извините, но куда это подставлять, пробовал по разному. ошибки выдает. сейчас ваш код выглядит так:
Код: Выделить весь код
cls
$OriginalLocation = "C:\xml\"

$AddressXPath = "/Extract/ReestrExtract/ExtractObjectRight/ExtractObject/ObjectDesc/Address/Content"

if (Test-Path $OriginalLocation)
{
	$obj = Select-Xml -Path (Get-ChildItem -Recurse -Path $OriginalLocation -Include @("*.xml") | where {! $_.PSIsContainer}) -Xpath $AddressXPath | Select Path,@{n="Address";e={$_.Node.InnerText.ToString()}}
	foreach($i in $obj)
	{
		Rename-Item -Path $i.Path -NewName "$($i.Address).xml" -Verbose
	}
}
все понял. куда, спасибо.

Последний раз редактировалось Tpyna4ek, 24-01-2018 в 14:23.


Отправлено: 12:52, 19-01-2018 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Переименование файла по маске. Damien_here Скриптовые языки администрирования Windows 5 13-06-2017 12:51
VBS/WSH/JS - Переименование файла по условиям bombording Скриптовые языки администрирования Windows 1 24-03-2014 16:17
VBS/WSH/JS - [решено] Перенос файла по содержанию Vertolet Скриптовые языки администрирования Windows 9 02-10-2013 02:40
CMD/BAT - [решено] Переименование файла по данным из самого файла dark-------13 Скриптовые языки администрирования Windows 11 21-04-2011 18:08
[решено] проверка XML-файла на соответствие XML schema в IE 6 и Firefox 2 dimait Вебмастеру 4 23-08-2007 02:02




 
Переход