使用输入文件名保存为新文件,只添加一些后缀 - Powershell

时间:2017-08-06 10:46:32

标签: powershell

所以我知道标题令人困惑,我为此道歉。

我需要做的就是不要写在同一个文件中,只需输入一个路径和名称即可轻松完成,它将在该路径上为我创建文件。

但那不是我想做的,我想取输入文件名并为其添加后缀,例如输入文件名为ABB后添加后缀将成为{{1 } ...

我如何通过Set-Content实现这一目标,或者是否有其他方式不需要我更改代码。

ABB-Clean

1 个答案:

答案 0 :(得分:1)

  • 将文件名拆分为路径和文件使用Split-Path(或使用属性目录,名称/ BaseName,文件对象的扩展名)
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|CID (*.cid)| *.cid|ICD (*.icd) | *.icd | All Files| *.*"
    $OpenFileDialog.ShowDialog() | Out-Null
    return $OpenFileDialog.filename
}

$inputfile  = Get-Item (Get-FileName)
$OutputFile = Join-Path (Split-Path $inputfile) ("{0}-Clean{1}"  -f $inputfile.BaseName,$inputfile.Extension)

(Get-Content $inputfile -Raw) | Foreach-Object { 
    $_  -replace '<Terminal .+\/>', '' `
        -replace '(?s)<Terminal .*?>(.|\s)*?</Terminal>', '' `
        -replace '(?s)<Private type="ABB.*?>(.|\s)*?</Private>', '' `
        -replace '(?s)<ConnectivityNode.*?>(.|\s)*?</ConnectivityNode>', ''
} | Set-Content $OutputFile