将XML复制到新目录中,创建重复文件,然后根据内部内容重命名重复文件

时间:2019-06-10 16:09:49

标签: xml shell powershell

我对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 :(得分:0)

如果没有重复的文件名,则以下代码将起作用。

$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
}