Как объединить два текстовых файла в PowerShell? - PullRequest
89 голосов
/ 06 января 2012

Я пытаюсь повторить функциональность команды "cat" в Unix.

Я хотел бы избежать решений, в которых я явно читаю оба файла в переменные, объединяю переменные вместе, а затем записываюкаскадная переменная.

Ответы [ 10 ]

127 голосов
/ 06 января 2012

Вы можете просто использовать cat example1.txt, example2.txt | sc examples.txt. С этим стилем вы также можете объединить более двух файлов. Кроме того, если файлы имеют одинаковые имена, вы можете использовать:

cat example*.txt | sc allexamples.txt

cat - это псевдоним для Get-Content, а sc - это псевдоним для Set-Content.

Примечание 1 : будьте осторожны с последним методом - если вы попытаетесь вывести на examples.txt (или аналог, который соответствует шаблону), PowerShell попадет в бесконечный цикл! (Я только что проверил это).

Примечание 2 : Вывод в файл с > не сохраняет кодировку символов! Вот почему рекомендуется использовать Set-Content (sc).

55 голосов
/ 23 мая 2013

Не использовать >;это портит кодировку символов.Использование:

Get-Content files.* | Set-Content newfile.file
13 голосов
/ 06 января 2012

В cmd вы можете сделать это:

copy one.txt+two.txt+three.txt four.txt

В PowerShell это будет:

cmd /c copy one.txt+two.txt+three.txt four.txt

В то время как PowerShell будет использовать gc , выше будет довольно быстро, особенно для больших файлов.И его можно использовать и для файлов не ASCII , используя переключатель /B.

11 голосов
/ 06 января 2012

Вы можете использовать командлет Add-Content .Может быть, это немного быстрее, чем другие решения, потому что я не получаю содержимое первого файла.

gc .\file2.txt| Add-Content -Path .\file1.txt
4 голосов
/ 03 февраля 2017

Для объединения файлов в командной строке это будет

type file1.txt file2.txt file3.txt > files.txt

Powershell преобразует команду типа в Get-Content, что означает, что вы получите ошибку при использовании команды типа в powershell, потому что для команды Get-Content требуется запятая, разделяющая файлы. Та же команда в powershell будет

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

3 голосов
/ 12 июня 2017

Если вам нужно упорядочить файлы по определенному параметру (например, дате и времени):

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
3 голосов
/ 18 августа 2015

Я использовал:

Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log 
-Encoding ASCII -Append

Это добавлено нормально.Я добавил кодировку ASCII для удаления нулевых символов, которые Notepad ++ показывал без явной кодировки.

1 голос
/ 02 августа 2015

Так как большинство других ответов часто неправильно форматируют (из-за конвейера), самое безопасное, что можно сделать следующим образом:

add-content $YourMasterFile -value (get-content $SomeAdditionalFile)

Я знаю, что вы хотели избежать чтения содержимого $SomeAdditionalFile в переменную, но, чтобы сохранить, например, форматирование новой строки, я не думаю, что есть подходящий способ сделать это без.в ваш $ YourMasterFile.Однако это чрезмерно ресурсоемкое.

1 голос
/ 06 января 2012

Вы можете сделать что-то вроде:

get-content input_file1 > output_file
get-content input_file2 >> output_file

, где > - это псевдоним для "out-file", а >> - для "out-file -append".

0 голосов
/ 03 марта 2016

Я думаю, что "способ PowerShell" может быть:

set-content destination.log -value (get-content c:\FileToAppend_*.log )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...