问题描述
我有2个数组。我想映射数组,然后获取数组的对象并将其用于重命名文件。 我试过了但是文件名不正确,因为它应该是数组的对象。
这是我得到一些信息的xml格式。
<?xml version="1.0" encoding="UTF-8"?>
<assign>
<define>
<systemid value="8537">
<description crm="AE/PR" priority="0"/>
<description crm="S1/W1/W2/ZH" priority="2"/>
<description crm="AP" priority="3"/>
</systemid>
</define>
</assign>
$CRMs = @("AE","S1","AP")
foreach ($c in $CRMs)
{
$priority = $JobSequence.jobassignseq.userdefineseq.systemid | Where-Object {$_.value -like "*$SSID*"} |
Select-Object -ExpandProperty description | Where-Object {$_.crm -like "*$c*"} | Select-Object -ExpandProperty priority
Write-Host "Prio $priority"
$check = $JobSequence.jobassignseq.userdefineseq.systemid |
Where-Object {$_.value -like "*$SSID*"} | Select-Object -ExpandProperty description |
Select-Object priority,crm | Where-Object {$_.priority -eq "$priority"} | Select-Object -ExpandProperty crm
$C1 = $check | ForEach-Object {$_ -split "/"}
Write-Host "CRM: $C1"
$Job = (Get-ChildItem $PathOp\$Image\*.job)
$C1 | ForEach-Object {
for ($i = 0; $i -lt $C1.count; $i++) {
$Job[$i] | Rename-Item -NewName {("$priority")[$i] + "`_$Date`_" + $_.Name.Replace('.job','.que')}
}
}
}
我的期望是将优先级0
分配给具有crm AE或PR的文件,将优先级2分配给具有crm S1或W1或W2或ZH的文件,并将优先级3分配给带有crm AP的文件。
任何人都可以帮助我,非常感谢。非常感谢
解决方法
您有很多无关的代码,您需要包括它如何发挥作用或排除它。一种建议是利用XML的好处来获取所需的信息。希望这个例子可以引导您正确的方向。
[xml]$xml = @'
<?xml version="1.0" encoding="UTF-8"?>
<assign>
<define>
<systemid value="8537">
<description crm="AE/PR" priority="0"/>
<description crm="S1/W1/W2/ZH" priority="2"/>
<description crm="AP" priority="3"/>
</systemid>
</define>
</assign>
'@
$description = $xml.SelectNodes("//description")
$description
现在包含所有3个节点
crm priority
--- --------
AE/PR 0
S1/W1/W2/ZH 2
AP 3
$CRMs = "AE","S1","AP"
foreach($c in $CRMs)
{
"Priority for CRM {0} is {1}" -f $c,($description | where crm -match $c | select -ExpandProperty priority)
}
几件事要注意。
出于可读性考虑,我将第二个传递给字符串格式表达式的字符串放在下一行,因为逗号是自然的换行符。
列表中不需要@(),它已经是一个数组。
$CRMs = "AE","AP"
$CRMs.GetType().basetype.name
Array