¿Cómo concateno dos archivos de texto en PowerShell?

Estoy intentando replicar la funcionalidad del comando “cat” en Unix.

Me gustaría evitar soluciones en las que explícitamente lea ambos archivos en variables, concatene las variables entre sí y luego escriba la variable concatenada.

Simplemente puede usar cat example1.txt, example2.txt | sc examples.txt cat example1.txt, example2.txt | sc examples.txt . También puede concatenar más de dos archivos con este estilo. Además, si los nombres de los archivos son similares, puede usar:

 cat example*.txt | sc allexamples.txt 

El cat es un alias para Get-Content , y sc es un alias para Set-Content .

Nota 1 : tenga cuidado con el último método: si intenta enviar a examples.txt (o similar que coincida con el patrón), PowerShell entrará en un ciclo infinito. (Acabo de probar esto).

Nota 2 : ¡La salida a un archivo con > no conserva la encoding de caracteres! Es por eso que se recomienda usar Set-Content ( sc ).

No use cat> ; confunde la encoding de caracteres. Utilizar:

 Get-Content files.* | Set-Content newfile.file 

Me llevó horas descubrirlo.

En cmd , puedes hacer esto:

 copy one.txt+two.txt+three.txt four.txt 

En PowerShell esto sería:

 cmd /c copy one.txt+two.txt+three.txt four.txt 

Si bien la forma de PowerShell sería usar gc , lo anterior será bastante rápido, especialmente para archivos grandes. Y también se puede usar en archivos que no sean ASCII usando el /B

Puede usar el cmdlet Add-Content . Quizás es un poco más rápido que las otras soluciones, porque no recupero el contenido del primer archivo.

 gc .\file2.txt| Add-Content -Path .\file1.txt 

Para concaturar archivos en el símbolo del sistema, sería

type file1.txt file2.txt file3.txt > files.txt

Powershell convierte el comando de tipo en Get-Content, lo que significa que obtendrá un error al usar el comando type en powershell porque el comando Get-Content requiere una coma que separa los archivos. El mismo comando en powershell sería

Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt

Solía:

 Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log -Encoding ASCII -Append 

Esta multa adjunta. Agregué la encoding ASCII para eliminar los caracteres nulos que Notepad ++ mostraba sin la encoding explícita.

Si necesita ordenar los archivos por un parámetro específico (por ejemplo, la fecha):

 gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log 

Puedes hacer algo como:

 get-content input_file1 > output_file get-content input_file2 >> output_file 

Donde > es un alias para “fuera de archivo”, y >> es un alias para “archivo fuera de archivo”.

Como la mayoría de las otras respuestas a menudo tienen un formato incorrecto (debido a la tubería), lo más seguro es lo siguiente:

 add-content $YourMasterFile -value (get-content $SomeAdditionalFile) 

Sé que quería evitar leer el contenido de $ SomeAdditionalFile en una variable, pero para guardar, por ejemplo, su formato de nueva línea, no creo que haya una forma adecuada de hacerlo.

Una solución sería recorrer su línea $ SomeAdditionalFile línea por línea y conectarla a su $ YourMasterFile. Sin embargo, esto requiere una gran cantidad de recursos.

Creo que el “camino de powershell” podría ser:

 set-content destination.log -value (get-content c:\FileToAppend_*.log )