Próbuję odtworzyć funkcjonalność cat
polecenia w systemie Unix.
Chciałbym uniknąć rozwiązań, w których jawnie wczytuję oba pliki do zmiennych, konkatenuję zmienne razem, a następnie wypisuję połączoną zmienną.
źródło
Próbuję odtworzyć funkcjonalność cat
polecenia w systemie Unix.
Chciałbym uniknąć rozwiązań, w których jawnie wczytuję oba pliki do zmiennych, konkatenuję zmienne razem, a następnie wypisuję połączoną zmienną.
Możesz po prostu użyć cat example1.txt, example2.txt | sc examples.txt
. Z pewnością możesz połączyć więcej niż dwa pliki z tym stylem. Ponadto, jeśli pliki mają podobne nazwy, możesz użyć:
cat example*.txt | sc allexamples.txt
cat
Jest aliasem Get-Content
, i sc
jest aliasem Set-Content
.
Uwaga 1 : Uważaj na tę drugą metodę - jeśli spróbujesz wyprowadzić do examples.txt
(lub coś podobnego, który pasuje do wzorca), PowerShell wpadnie w nieskończoną pętlę! (Właśnie to przetestowałem).
Uwaga 2 : Wyprowadzanie do pliku z >
nie zachowuje kodowania znaków! Dlatego zalecane jest użycie Set-Content
( sc
).
Set-Content
używa krajowej strony kodowej (np. Windows-1252 dla języka angielskiego). Jeśli pliki źródłowe zawierają inne kodowanie (np. Windows-1251 lub UTF8), należy ustawić prawidłowe kodowaniesc file.txt -Encoding UTF8
(liczby takie jak 1251 dla języka rosyjskiego są obsługiwane od wersji 6.2)Add-Content
polega na tym, że jeśli uruchomisz polecenie dwa razy, zagregowany plik będzie dwukrotnie dłuższy. Dobry zamiennik toOut-File
. Przykład tutajGet-Content my.bin -Raw | Set-Content my.bin -NoNewline
nie zmieni sięmy.bin
z wyjątkiem sygnatur czasowych.-Raw
zachowuje wszystkie bajty CR / LF, jednocześnie-NoNewline
uniemożliwiając programowi PowerShell dodawanie własnych bajtów CR / LF.Nie używać
>
; psuje kodowanie znaków. Posługiwać się:źródło
cat
jest aliasem dlaGet-Content
.ÿþ
która jestFF FE
na początku mojego połączonego pliku podczas używania>
.W programie
cmd
możesz to zrobić:W PowerShell byłoby to:
Podczas gdy sposobem PowerShell byłoby użycie gc , powyższe będzie dość szybkie, szczególnie w przypadku dużych plików. Może być również używany na plikach innych niż ASCII za pomocą
/B
przełącznika.źródło
Możesz użyć polecenia cmdlet Add-Content . Może jest trochę szybszy niż inne rozwiązania, bo nie pobieram zawartości pierwszego pliku.
źródło
gc
odnosi?gc
jest aliasem dla Get-ContentByłoby to łączenie plików w wierszu poleceń
PowerShell konwertuje
type
polecenie naGet-Content
, co oznacza, że podczas korzystania ztype
polecenia w programie PowerShell wystąpi błąd, ponieważGet-Content
polecenie wymaga przecinka oddzielającego pliki. To samo polecenie w PowerShell byłobyźródło
Jeśli potrzebujesz uporządkować pliki według określonego parametru (np. Daty i godziny):
źródło
Użyłem:
To dodane grzywny. Dodałem kodowanie ASCII, aby usunąć znaki nul, które Notepad ++ pokazywał bez jawnego kodowania.
źródło
Możesz zrobić coś takiego:
Gdzie
>
jest aliasem dla „out-file”, a >> jest aliasem dla „out-file -append”.źródło
Ponieważ w większości innych odpowiedzi formatowanie jest często nieprawidłowe (ze względu na orurowanie), najbezpieczniejsze jest wykonanie następujących czynności:
Wiem, że chciałeś uniknąć wczytywania zawartości $ SomeAdditionalFile do zmiennej, ale aby zapisać na przykład formatowanie nowej linii, nie sądzę, aby można było to zrobić bez.
Rozwiązaniem byłoby zapętlenie $ SomeAdditionalFile wiersz po wierszu i przekierowanie go do $ YourMasterFile. Jednak jest to nadmiernie wymagające zasoby.
źródło
Aby zachować kodowanie i zakończenia linii:
Uwaga: AFAIR, którego parametry nie są obsługiwane przez stare powłoki Powershell (<3? <4?)
źródło
Myślę, że „sposób PowerShell” mógłby wyglądać następująco:
źródło