$inputfile = Get-ChildItem -Path C:\temp\*.xml
foreach ($name in $inputfile)
{
$rg = Get-Content -Path $name | Select-String -Pattern "(?<=\#\s)(\d{10})" | Select-Object {$_.matches.groups[0].Value} | select -first 1
$file = Get-Content -Path $name | Select-String -Pattern "[0-9].pdf" | Select-Object {$_.matches.groups[0].Value} | select -first 1
Copy-Item "C:\temp\$file" -Destination "C:\temp\output\$rg.pdf"
}
我正在阅读XML文件,并使用select-string查找所需的匹配项。$rg的结果是0123456789 $file的结果是1.pdf
$_.matches.groups[0].Value
--------------------------
0123456789
1.pdf
最后一步,我想将1.pdf复制到子目录中,并将其重命名为0123456789.pdf
但文件没有复制,没有给出错误。我可以想象,我需要将结果存储在一个数组中,然后应该能够迭代它,所以总是有一个数据集,它有一个$rg关联到一个$file。除此之外,我没有主意了。我是新的powershell和脚本一般,我想这是一些基本的我错过了。
/edit:按照JosefZ的指示,copy-item cmdlet已更改,现在提供所需的结果:
Copy-Item -Path "C:\temp\$file.'matches.groups[0].value')" -Destination (New-Item -Name "$($rg.'$_.matches.groups[0].Value').pdf" -ItemType file -Path "C:\temp\output\")
这将把本例中的文件1.pdf复制到0123456789.pdf
1条答案
按热度按时间au9on6nz1#
使用正则表达式解析XML并不是一个好主意,总的来说……
您应该使用适当的工具解析XML文档,例如
Select-Xml
cmdlet。但是,如果你坚持选择的方法,请记住以下内容(对于
$file
变量也是如此):试试看