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.
fonte
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.
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 corretasc 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 aquiGet-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:fonte
cat
é um alias paraGet-Content
.ÿþ
que estáFF FE
no início do meu arquivo concatenado ao usar>
.Em
cmd
, você pode fazer isso:No PowerShell, isso seria:
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.fonte
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.
fonte
gc
refere?gc
é um alias para Get-ContentPara concat arquivos no prompt de comando, seria
O PowerShell converte o
type
comando emGet-Content
, o que significa que você obterá um erro ao usar otype
comando no PowerShell porque oGet-Content
comando requer uma vírgula separando os arquivos. O mesmo comando no PowerShell seriafonte
Se você precisar ordenar os arquivos por parâmetro específico (por exemplo, data e hora):
fonte
Eu usei:
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.
fonte
Você pode fazer algo como:
Onde
>
é um alias para "out-file" e >> é um alias para "out-file -append".fonte
Visto que a maioria das outras respostas costuma ter a formatação errada (devido ao encanamento), a coisa mais segura a fazer é a seguinte:
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.
fonte
Para manter a codificação e as terminações de linha:
Observação: AFAIR, cujos parâmetros não são compatíveis com Powershells antigos (<3? <4?)
fonte
Eu acho que a "maneira PowerShell" poderia ser:
fonte