Я пытаюсь воспроизвести функциональность команды cat
в Unix.
Я хотел бы избежать решений, в которых я явно читаю оба файла в переменные, объединяю переменные вместе, а затем записываю объединенную переменную.
Я пытаюсь воспроизвести функциональность команды cat
в Unix.
Я хотел бы избежать решений, в которых я явно читаю оба файла в переменные, объединяю переменные вместе, а затем записываю объединенную переменную.
Вы можете просто использовать 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
).
Не используйте >
; это портит кодировку символов. Использование:
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.txt
PowerShell преобразует команду type
в Get-Content
, что означает, что вы получите ошибку при использовании команды type
в PowerShell, поскольку для команды Get-Content
требуется запятая, разделяющая файлы. Та же команда в PowerShell будет
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Если вам нужно заказать файлы по определенному параметру (например, по дате):
gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
Я использовал:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Этот добавленный штраф. Я добавил кодировку ASCII, чтобы удалить nul-символы, которые Notepad ++ показывал без явной кодировки.
Так как большинство других ответов часто ошибочно формируют форматирование (из-за трубопровода), самое безопасное действие заключается в следующем:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Я знаю, что вы хотели избежать чтения содержимого $SomeAdditionalFile в переменную, но чтобы сохранить, например, форматирование новой строки, я не думаю, что есть правильный способ сделать это без.
Обходным путем было бы перебрать ваш $SomeAdditionalFile по строкам и трубопроводам в ваш $YourMasterFile. Однако это чрезмерно ресурсоемкий процесс.
Вы можете сделать что-то вроде:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Где >
является псевдонимом для "out-file", а → является псевдонимом для "out-file -append".
Я думаю, что способ "powershell" может быть:
set-content destination.log -value (get-content c:\FileToAppend_*.log )