Копирование XML в новый каталог, создание дубликата, а затем переименование дубликата файла на основе внутреннего содержимого - PullRequest
0 голосов
/ 10 июня 2019

Я очень новичок в сценариях 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

1 Ответ

0 голосов
/ 10 июня 2019

Если у вас нет повторяющихся имен файлов, будет работать следующий код.

$srcDir = "C:\NewDocs"
$destDir = "C:\Converted"

mkdir -Path $destDir -Force > $null

Get-ChildItem -Path $srcDir -Filter *.xml -Recurse |
Copy-Item -Destination $destDir -PassThru |
Copy-Item -Destination {
    "{0}\User.{1}.xml" -f $_.Directory, ([xml](Get-Content $_.FullName)).id.extension
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...