powershell select-string查找匹配项,并使用这些结果重命名/复制文件

dkqlctbz  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(260)
$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

au9on6nz

au9on6nz1#

使用正则表达式解析XML并不是一个好主意,总的来说……
您应该使用适当的工具解析XML文档,例如Select-Xml cmdlet
但是,如果你坚持选择的方法,请记住以下内容(对于$file变量也是如此):

"C:\temp\output\$rg.pdf"
C:\temp\output\@{$_.matches.groups[0].Value=0123456789}.pdf

试试看

"C:\temp\output\$($rg.'$_.matches.groups[0].Value').pdf"
C:\temp\output\0123456789.pdf

相关问题