Estou tentando replicar a funcionalidade do cat
comando no Unix.
Gostaria de evitar soluções em que leio explicitamente ambos os arquivos em variáveis, concateno as variáveis juntas e, em seguida, escrevo a variável concatenada.
Estou tentando replicar a funcionalidade do cat
comando no Unix.
Gostaria de evitar soluções em que leio explicitamente ambos os arquivos em variáveis, concateno as variáveis juntas e, em seguida, escrevo a variável concatenada.
Respostas:
Você pode simplesmente usar cat example1.txt, example2.txt | sc examples.txt
. Você certamente pode concatenar mais de dois arquivos com esse estilo também. Além disso, se os arquivos tiverem nomes semelhantes, você pode usar:
cat example*.txt | sc allexamples.txt
O cat
é um alias para Get-Content
e sc
é um alias para Set-Content
.
Nota 1 : tenha cuidado com o último método - se você tentar enviar para examples.txt
(ou algo semelhante que corresponda ao padrão), o PowerShell entrará em um loop infinito! (Acabei de testar isso).
Nota 2 : A saída para um arquivo com >
não preserva a codificação de caracteres! É por isso que o uso de Set-Content
( sc
) é recomendado.
Set-Content
usa a página de código nacional (por exemplo, Windows-1252 para inglês). Se os arquivos de origem contiverem outra codificação (por exemplo, Windows-1251 ou UTF8), você deve definir a codificação correta sc file.txt -Encoding UTF8
(números como 1251 para russo são suportados desde a v6.2)
Add-Content
é que se você executar o comando duas vezes, o arquivo agregado terá o dobro do tamanho. Um bom substituto é Out-File
. Exemplo aqui
Get-Content my.bin -Raw | Set-Content my.bin -NoNewline
não será alterado, my.bin
exceto os carimbos de data / hora. -Raw
preserva quaisquer bytes CR / LF, enquanto -NoNewline
evita que o PowerShell adicione seus próprios bytes CR / LF.
Não use >
; bagunça a codificação de caracteres. Usar:
Get-Content files.* | Set-Content newfile.file
cat
é um alias para Get-Content
.
ÿþ
que está FF FE
no início do meu arquivo concatenado ao usar >
.
Em cmd
, você pode fazer isso:
copy one.txt+two.txt+three.txt four.txt
No PowerShell, isso seria:
cmd /c copy one.txt+two.txt+three.txt four.txt
Embora a maneira do PowerShell seja usar o gc , o procedimento acima será muito rápido, especialmente para arquivos grandes. E também pode ser usado em arquivos não ASCII usando o /B
switch.
Você pode usar o cmdlet Add-Content . Talvez seja um pouco mais rápido do que as outras soluções, pois não recupero o conteúdo do primeiro arquivo.
gc .\file2.txt| Add-Content -Path .\file1.txt
gc
refere?
gc
é um alias para Get-Content
Para concat arquivos no prompt de comando, seria
type file1.txt file2.txt file3.txt > files.txt
O PowerShell converte o type
comando em Get-Content
, o que significa que você obterá um erro ao usar o type
comando no PowerShell porque o Get-Content
comando requer uma vírgula separando os arquivos. O mesmo comando no PowerShell seria
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Eu usei:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Esta multa anexada. Eu adicionei a codificação ASCII para remover os caracteres nulos que o Notepad ++ estava mostrando sem a codificação explícita.
Você pode fazer algo como:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Onde >
é um alias para "out-file" e >> é um alias para "out-file -append".
Visto que a maioria das outras respostas costuma ter a formatação errada (devido ao encanamento), a coisa mais segura a fazer é a seguinte:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Eu sei que você queria evitar a leitura do conteúdo de $ SomeAdditionalFile em uma variável, mas para salvar, por exemplo, sua formatação de nova linha, não acho que haja uma maneira adequada de fazer isso sem.
Uma solução alternativa seria fazer um loop em seu $ SomeAdditionalFile linha por linha e canalizá-lo para seu $ YourMasterFile. No entanto, isso exige muitos recursos.