Запись содержимого одного файла в другой с помощью замены mulin powershell - PullRequest
2 голосов
/ 28 февраля 2020

У меня есть два текстовых файла, которые содержат следующее

file1.txt

Abcd
Efgh
HIJK

sample.txt

Some pre content goes here


File1Content

Теперь я пытаюсь прочитать все содержимое файла file1.txt, используйте файл sample.txt и замените слово File1Content фактическим содержимым файла file1.txt, но он обеспечивает вывод в одну строку.

output.txt должен выглядеть следующим образом

Some pre content goes here
Abcd
Efgh
HIJK

Но в настоящее время это выглядит так

Some pre content goes here
Abcd  Efgh    HIJK

Я использую следующий код, который работает, я попытался добавить r и n, но он не работает. Может ли кто-нибудь, пожалуйста, помогите

$filecontent = Get-Content "C:\location\file1.txt"
(Get-Content -path C:\Location\sample.txt -Raw)   ForEach-Object { $_ -replace "File1Content", "$filecontent`r`n" } | Set-Content C:\Export\output.txt

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

И foreach l oop можно удалить

$filecontent = Get-Content "d:\testdir\file1.txt"
(Get-Content -path "d:\testdir\sample.txt").Replace("File1Content","$($filecontent -join [Environment]::NewLine)")| Set-Content d:\testdir\output.txt
0 голосов
/ 28 февраля 2020

Параметр -Raw широко используется для повышения скорости Get-Content. Он читает весь файл как одну строку, пропуская символы новой строки. Так что чтение быстро. Вы можете попробовать это:

$newcontent = Get-Content "sample.txt" | Foreach { 
  $_ -replace "File1Content", "$(Get-Content file1.txt)"
}
$newcontent | Set-Content output.txt
0 голосов
/ 28 февраля 2020

Вы должны добавить NewLine к каждой записи в $filecontent. Вы можете сделать это, используя оператор -join:

$_ -replace "File1Content", "$($filecontent -join [Environment]::NewLine)"
...