【发布时间】:2017-08-06 16:53:03
【问题描述】:
我在 PowerShell 脚本中编写了这段代码,但由于某种原因它无法正常工作。程序本身正在运行,但多行的替换不起作用 - 任何人都可以解释为什么?
Function Get-FileName($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.initialDirectory = $initialDirectory
$OpenFileDialog.filter = "SCD (*.scd)| *.scd"
$OpenFileDialog.ShowDialog() | Out-Null
$OpenFileDialog.filename
}
$inputfile = Get-FileName "C:\Users\Mr.Nephilim\Desktop\ABB"
#$inputdata = get-content $inputfile
#$configFiles = Read-Host 'Enter Complete directory to file'
(Get-Content $inputfile) |
Foreach-Object {
$_ -replace '(?ms)^\[\t\n\v\f\r ]<Private type="ABB.*?</Private>', ''
#-replace '<Terminal .+\/>', '' `
#-replace '<Terminal .*?>\s<\/Terminal>', '' `
#-replace '<Private type=\"ABB(.|\n)*?<\/Private>', '' `
#-replace '<ConnectivityNode.*?>(.|\n)*?<\/ConnectivityNode>', ''
#-replace '<Terminal .+/>', '' `
#-replace '<Private type="ABB.*?>.*?</Private>', '' `
#-replace '<Terminal .+>', '' `
#-replace '<Private type=\"ABB.*?>', '' `
#-replace '<esld:.*?>', '' `
#-replace '<esld:.*?\/>', '' `
#-replace '</esld:.*?>', '' `
#-replace '</Private.*?>', '' `
#-replace '</Terminal.*>', '' `
#-replace '<ConnectivityNode.*?>', '' `
#-replace '</ConnectivityNode.*?>', ''
} |
Set-Content $inputfile
(GC $inputfile)|?{$_.Trim(" `t")}|SC $inputfile
【问题讨论】:
-
也许你最好解决“替换多行不起作用”的问题。 “不工作”是什么意思?多行是什么意思?
-
\[\t\n\v\f\r ]->\s,.*?->[\s\S]*?? -
也许this可以帮你解决多行问题?
-
我认为powershell不支持Ansgar \s...我尝试过前2个的任何方式我会看看是否[\s\S] *?工作...
标签: c# powershell