Удалить пробел из файла - сохранить одну строку - PullRequest
0 голосов
/ 11 июня 2018

Я новичок в PowerShell и пытаюсь удалить пробелы из файла.Файл содержит некоторые значения и имеет пробелы (отступ):

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

Я пытаюсь удалить пробел, но сохраняю строку «каталог», так как она содержит пробелы в пути 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 голосов
/ 11 июня 2018

Если это только вопрос удаления отступов, вы можете использовать функцию Trim:

$fileContent = Get-Content C:\File.txt
$fileContent | ForEach-Object { $_.Trim() } | Set-Content C:\File.txt

Функция Trim удаляет только начальные и конечные пробелы.Также есть TrimStart и TrimEnd, если вы хотите удалить только начальный или конечный пробел.

Примечание. Содержимое файла сначала сохраняется в переменной, чтобы снять блокировку файла.Система до Set-Content вызывается.Если вы используете другой выходной файл, вы можете передать результат Get-Content непосредственно в ForEach-Object.

0 голосов
/ 11 июня 2018

Set-Content получает входные данные либо по конвейеру, либо через параметр -Value.Ваш код также не предоставляет, поэтому командлет пишет пустой файл.Кроме того, ваша обработка полностью удалит все строки, содержащие строку «Directory», из вывода.

Измените код на что-то вроде этого, и проблема исчезнет:

(Get-Content 'C:\File.txt') | ForEach-Object {
    if ($_ -notlike 'Directory=*') {
        $_ -replace ' ', ''
    } else {
        $_
    }
} | Set-Content 'C:\File.txt'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...