2015-06-10 63 views
0

我有以下腳本應該從一個CMD腳本運行:PowerShell的替換文件的內容增加了redundent回車

powershell -command "(Get-Content %baseKitPathFile%) | ForEach-Object { $_ -replace 'Latest', '%version%' } | Set-Content %baseKitPathFile%" 

腳本是工作的罰款和更換的Latest內容到version變量但它還增加了文件的末尾

如何搜索替換文本文件內容沒有額外的後回車回車

也許可以嘗試使用[io.file]:

最重要的是,如果要從CMD腳本運行

+0

用'Out-File'替換'Set-Content' –

+0

不工作,仍然增加額外的線 – user829174

回答

0

Set-ContentOut-File既把斷行每行之後,包括最後一個。爲了避免這種情況,你必須使用一個IO.File方法:

powershell -Command "$txt = (Get-Content %baseKitPathFile%) -replace 'Latest', '%version%'; [IO.File]::WriteAllText('%baseKitPathFile%', $txt)" 

PowerShell腳本會更好地處理比上面的命令行,但:

[CmdletBinding()] 
Param(
    [Parameter()][string]$Filename, 
    [Parameter()][string]$Version 
) 

$txt = (Get-Content $Filename) -replace 'Latest', $Version 
[IO.File]::WriteAllText($Filename, $txt) 

這樣稱呼它:

powershell -File "C:\path\to\your.ps1" "%baseKitPathFile%" "%version%" 
+0

這種方法唯一的缺點是.NET路徑和PowerShell路徑通常是d ifferent。例如,雖然您可以將「〜\ somefile.txt」傳遞給「Set-Content」或「Out-File」,但.NET不會理解它。與基於當前目錄的路徑或映射到PSDrives的路徑相同。要解決這個問題,首先用'$ ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($ Filename)'來解析路徑。 – Josh