2012-01-05 41 views

Respuesta

80

Puede simplemente usar cat example1.txt, example2.txt | sc examples.txt. También puede concatenar más de dos archivos con este estilo. Además, si los archivos se denominan de manera similar, puede utilizar:

cat example*.txt | sc allexamples.txt 

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

Nota 1: Ten cuidado con este último método - si intenta salida a examples.txt (o similar que coincide con el patrón), PowerShell entrar en un bucle infinito! (Acabo de probar esto).

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

+0

Sólo en caso de que alguien quiere iterar sobre los archivos con la _GET -ChildItems | Construcción Foreach-Object_ es posible que desee usar Add-Content en lugar de Set-Content. De lo contrario, el archivo de destino se sobrescribe en cada iteración. – Jonas

1

Usted puede hacer algo como:

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

Dónde > es un alias de "Out-File", y >> es un alias de "fuera -append archivo".

12

En cmd, usted puede 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 

Mientras que la forma PowerShell sería utilizar gc, lo anterior será bastante rápido, especialmente para archivos grandes Y también puede usarse en archivos que no sean ASCII usando el interruptor /B.

+2

Para mí el comando cat ejecuta varias órdenes de magnitud mayor que el comando cmd/c (que corre muy rápido); gracias por señalar la opción! – Rob

10

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 
44

No utilice cat ... >; confunde la codificación de caracteres. Uso:

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

Me tomó horas encontrar esto.

+0

'cat' es un alias de' Get-Content'. – n0rd

+3

@ n0rd creo que fue más una cosa de "usar la tubería en su lugar". – ksoo

1

Dado que la mayoría de las otras respuestas consiguen a menudo el formato incorrecto (debido a la tubería), lo más seguro que hacer es la siguiente:

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

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

Una solución sería colocar a través de su línea de $ SomeAdditionalFile por línea y tuberías que en su YourMasterFile $. Sin embargo, esto requiere una gran cantidad de recursos.

3

utilicé:

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

Esta multa adjuntas. Agregué la codificación ASCII para eliminar los caracteres nulos que Notepad ++ mostraba sin la codificación explícita.

0

Creo que el "camino PowerShell" podría ser:

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

a concat archivos de símbolo del sistema sería

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

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

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

1

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

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