Я намагаюся копіювати функціональність 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
) рекомендується.
Set-Content
використовується національна кодова сторінка (наприклад, Windows-1252 для англійської мови). Якщо вихідні файли містять інше кодування (наприклад, Windows-1251 або UTF8), ви повинні встановити правильне кодування sc file.txt -Encoding UTF8
(такі цифри, як 1251 для російської мови, підтримуються з v6.2)
Add-Content
полягає в тому, що якщо запустити команду двічі, то зведений файл удвічі довший. Гарна заміна є Out-File
. Приклад тут
Get-Content my.bin -Raw | Set-Content my.bin -NoNewline
не змінюватиме, my.bin
крім часових позначок. -Raw
зберігає будь-які байти CR / LF, в той час як -NoNewline
запобігає доданню PowerShell власних байтів CR / LF.
Не використовуйте >
; він псує кодування символів. Використання:
Get-Content files.* | Set-Content newfile.file
cat
псевдонім для Get-Content
.
ÿþ
який знаходиться FF FE
на початку мого з'єднаного файлу при використанні >
.
В 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
gc
відноситься?
gc
є псевдонімом Get-Content
Згорнути файли в командному рядку було б
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
Я використав:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Це додало штраф. Я додав кодування ASCII для видалення нульових символів, які показав Notepad ++ без явного кодування.
Ви можете зробити щось на кшталт:
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. Однак це занадто багато ресурсів.