从文件中删除空格 - 保留一行

时间:2018-06-11 12:41:04

标签: powershell

我是PowerShell的新手并试图从文件中删除空格。该文件包含一些值并具有空格(缩进):

Hostname=hostname1
Server=server1
Directory=C:\Program Files\Test
Database=db1

我正在尝试删除空格,但保留"目录" line,因为它在路径C:\Program Files\Test中包含一个空格,这将破坏构建。这是我到目前为止的代码:

foreach ($Line in (Get-Content -Path C:\File.txt) | Where-Object {$_ -notcontains "Directory"}) {
    $line -replace " ", ""
    Set-Content -Path C:\File.txt
}

但这会产生一个空文件。我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果只是删除缩进的问题,可以使用Error at Command Line : 16 Column : 9 Error report - SQL Error: ORA-00904: "PERMISSIONS"."ID": invalid identifier 00904. 00000 - "%s: invalid identifier" - 函数:

Trim

$fileContent = Get-Content C:\File.txt $fileContent | ForEach-Object { $_.Trim() } | Set-Content C:\File.txt - 函数仅删除前导和尾随空格。如果您只想删除前导或尾随空格,还有TrimTrimStart

注意:文件的内容首先存储在变量中,以便在调用TrimEnd之前释放文件系统上的锁。如果您使用其他输出文件,则可以将Set-Content的结果直接输入Get-Content

答案 1 :(得分:1)

Set-Content通过管道或参数-Value接收输入。您的代码也没有提供,因此cmdlet正在写一个空文件。此外,您的处理将从输出中完全删除包含字符串“Directory”的所有行。

将您的代码更改为类似的内容,问题将消失:

(Get-Content 'C:\File.txt') | ForEach-Object {
    if ($_ -notlike 'Directory=*') {
        $_ -replace ' ', ''
    } else {
        $_
    }
} | Set-Content 'C:\File.txt'