Как объединить два текстовых файла в PowerShell?
Я пытаюсь воспроизвести функциональность команды " cat " в Unix.
Я хотел бы избежать решений, в которых я явно читаю оба файла в переменные, объединяю переменные вместе, а затем записываю объединенную переменную.
10 ответов:
вы можете просто использовать
cat example1.txt, example2.txt | sc examples.txt. Вы можете, конечно, объединить более двух файлов с этим стилем, тоже. Кроме того, если файлы называются аналогично, вы можете использовать:cat example*.txt | sc allexamples.txtThe
catпсевдонимGet-ContentиscпсевдонимSet-Content.Примечание 1: будьте осторожны с последним методом - если вы пытаетесь вывести на
examples.txt(или аналогично, что соответствует шаблону), PowerShell попадет в бесконечный петля! (Я только что проверил это).примечание 2.: вывод в файл с
>не сохраняет кодировку! Вот почему с помощьюSet-Content(sc) рекомендуется.
не используйте
cat...>; это портит кодировку символов. Использование:Get-Content files.* | Set-Content newfile.fileмне потребовалось несколько часов, чтобы это выяснить.
на
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переключатель.
вы могли бы использовать Add-Content. Может быть, это немного быстрее, чем другие решения, потому что я не получить содержимое первого файла.
gc .\file2.txt| Add-Content -Path .\file1.txt
для объединения файлов в командной строке это будет
type file1.txt file2.txt file3.txt > files.txtPowershell преобразует команду type в Get-Content, что означает, что вы получите ошибку при использовании команды type в powershell, поскольку команда Get-Content требует запятой, разделяющей файлы. Та же команда в powershell будет
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Я:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log -Encoding ASCII -Appendэтому добавляется нормально. Я добавил кодировку ASCII, чтобы удалить символы nul Notepad++ показывал без явной кодировки.
Если вам нужно упорядочить файлы по определенному параметру (например, дата и время):
gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
Вы можете сделать что-то вроде:
get-content input_file1 > output_file get-content input_file2 >> output_fileздесь
>- это псевдоним для "out-file", а > > -псевдоним для"out-file-append".
Так как большинство других ответов часто получают неправильное форматирование (из-за трубопровода), самое безопасное, что нужно сделать, это следующее:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)Я знаю, что вы хотели избежать чтения содержимого $SomeAdditionalFile в переменную, но для того, чтобы сохранить, например, форматирование новой строки я не думаю, что есть правильный способ сделать это без.
обходным путем было бы перебирать ваш $SomeAdditionalFile строка за строкой и передавать это в ваш $YourMasterFile. Однако это слишком ресурсоемко.