Подтвердить что ты не робот

Как объединить два текстовых файла в PowerShell?

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

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

4b9b3361

Ответ 1

Вы можете просто использовать 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).

Ответ 2

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

Get-Content files.* | Set-Content newfile.file

Ответ 3

В 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.

Ответ 4

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

gc .\file2.txt| Add-Content -Path .\file1.txt

Ответ 5

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

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

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

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

Ответ 6

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

gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log

Ответ 7

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

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

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

Ответ 8

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

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

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

Обходным путем было бы перебрать ваш $SomeAdditionalFile по строкам и трубопроводам в ваш $YourMasterFile. Однако это чрезмерно ресурсоемкий процесс.

Ответ 9

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

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

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

Ответ 10

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

set-content destination.log -value (get-content c:\FileToAppend_*.log )