Powershell新手寻求帮助。
我有一个powershell脚本,它可以将文本文件中的优先级值更改为50:
if ($line.contains("Priority") )
{
$LastComma = $line.LastIndexOf(",") +1
$N = $line.Substring(0,$LastComma)
$N = $N + "50"
$lines[$counter] = $N
}
这可以正常工作,并且完全可以实现我想要的功能,但是我现在需要对其进行修改,以便在还存在以下行的情况下将优先级值更改为45:
Provider = XYZ
如果此提供者值不是XYZ,则所有优先级值都将像以前一样设置为50。任何人都对如何实现此目标有任何建议?
谢谢
答案 0 :(得分:0)
请下次尝试提供working example。
没有提供比提供的更多信息,这是解决方案的草案:
foreach ($line in $lines) {
$value = "XYZ"
$check = $false
if ($line.contains("Provider = $value")) {
$check = $true
}
if ($line.contains("Priority")) {
if ($check) {
$priority = 45
} else {
$priority = 50
}
$LastComma = $line.LastIndexOf(",") +1
$N = $line.Substring(0,$LastComma)
$N = $N + "$priority"
$lines[$counter] = $N
}
}
备注:这是假设Provider
标签位于Priority
标签之前。
答案 1 :(得分:0)
此示例说明了使用Powershell的几个概念:
使用正则表达式匹配每一行
使用正则表达式替换每一行
使用switch
语句
这是一个测试文件:
Set-Content test.txt "Provider=ABC,Priority=3
Provider=DEF,Priority=4
Not a provider
Provider=XYZ,Priority=5"
您可以使用逐行转换测试文件
switch
声明(感谢@ TheIncorrigible1)
switch -Regex -File test.txt
{
'Provider=XYZ.+Priority='
{
$_ -replace "Priority=\d+","Priority=45"
continue
}
'Priority='
{
$_ -replace "Priority=\d+","Priority=50"
continue
}
default
{
$_
continue
}
}