Estoy intentando replicar la funcionalidad del cat
comando en Unix.
Me gustaría evitar soluciones en las que leo explícitamente ambos archivos en variables, concateno las variables juntas y luego escribo la variable concatenada.
Estoy intentando replicar la funcionalidad del cat
comando en Unix.
Me gustaría evitar soluciones en las que leo explícitamente ambos archivos en variables, concateno las variables juntas y luego escribo la variable concatenada.
Respuestas:
Simplemente puede usar cat example1.txt, example2.txt | sc examples.txt
. Seguramente también puede concatenar más de dos archivos con este estilo. Además, si los archivos tienen un nombre similar, 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 generar una salida a examples.txt
(o similar que coincida 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
).
Set-Content
utiliza la página de códigos nacionales (por ejemplo, Windows-1252 para inglés). Si los archivos de origen contienen otra codificación (por ejemplo, Windows-1251 o UTF8), debe configurar la codificación correcta sc file.txt -Encoding UTF8
(números como 1251 para ruso son compatibles desde v6.2)
Add-Content
es que si ejecuta el comando dos veces, el archivo agregado es el doble de largo. Un buen reemplazo es Out-File
. Ejemplo aquí
Get-Content my.bin -Raw | Set-Content my.bin -NoNewline
no alterará my.bin
excepto las marcas de tiempo. -Raw
conserva los bytes CR / LF, mientras que -NoNewline
evita que PowerShell agregue sus propios bytes CR / LF.
No lo use >
; estropea la codificación de caracteres. Utilizar:
Get-Content files.* | Set-Content newfile.file
cat
es un alias de Get-Content
.
ÿþ
cuál está FF FE
al comienzo de mi archivo concatenado cuando lo uso >
.
En cmd
, 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
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 utilizar en archivos que no sean ASCII mediante el /B
conmutador.
Puede usar el cmdlet Add-Content . Tal vez sea 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
gc
refiere?
gc
es un alias de Get-Content
Para concatizar archivos en el símbolo del sistema sería
type file1.txt file2.txt file3.txt > files.txt
PowerShell convierte el type
comando en Get-Content
, lo que significa que obtendrá un error al usar el type
comando en PowerShell porque el Get-Content
comando requiere una coma que separe 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
Esto se agregó bien. Agregué la codificación ASCII para eliminar los caracteres nulos que mostraba Notepad ++ sin la codificación explícita.
Puedes hacer algo como:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Donde >
es un alias para "out-file", y >> es un alias para "out-file -append".
Dado que 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ías evitar leer el contenido de $ SomeAdditionalFile en una variable, pero para guardar, por ejemplo, el formato de tu nueva línea, no creo que haya una forma adecuada de hacerlo sin él.
Una solución alternativa sería recorrer su $ SomeAdditionalFile línea por línea y conectarlo a su $ YourMasterFile. Sin embargo, esto requiere demasiados recursos.