Я очень новичок в сценариях Powershell, поэтому, пожалуйста, прости мои жестокие соглашения об именах или ненужные переменные. Я пытаюсь извлечь необходимую информацию из XML-файла и переименовать файл в новой папке как таковой, но я хотел бы получить копию исходного имени файла, а также в преобразованной папке, чтобы убедиться, что все документы были преобразованы и чтобы иметь возможность точно определить, были ли пропущены какие-либо файлы.
Я создаю это в Windows Powershell ISE (x86). Приведенный ниже код успешно дает копии и перемещает файлы, а затем переименовывает их, но у меня возникают проблемы в операторе ForEach, чтобы рекурсивно копировать оригинальное имя файла снова и переименовывать дублированную копию, а не просто переименовывать перемещенный файл.
Будем весьма благодарны за любые советы по добавлению нужной функции в приведенный ниже код или рекомендации по выбрасыванию исключений для ошибок ItemNotFoundException или IOException, так как они будут использоваться для переименования 26000 документов с высокой чувствительностью.
$srcFolder = "C:\NewDocs\*.xml"
$destFolder = "C:\Converted"
$newFolder = Get-ChildItem $srcFolder -Recurse
Foreach($p in $newFolder) {
[xml]$xml = Get-Content $p
copy-item $srcFolder -Destination $destFolder
}
$convertFolder = Get-ChildItem $destFolder -Recurse
Foreach ($file in $convertFolder) {
[xml]$newXML = Get-Content $file
[string]$NewName = 'User.'+$(newXML.id.extension)
Rename-Item -Path $file.FullName -NewName ($NewName + ".xml")
}
фактические результаты
C:\NewDocs
Name
1.xml
2.xml
3.xml
4.xml
5.xml
C:\Converted
Name
User.223.xml
User.224.xml
User.225.xml
User.226.xml
User.227.xml
Я бы хотел, чтобы C: \ Converted содержал приведенные ниже результаты, а C: \ NewDocs оставался неизменным
1.xml
2.xml
3.xml
4.xml
5.xml
User.223.xml
User.224.xml
User.225.xml
User.226.xml
User.227.xml