J'essaie de reproduire la fonctionnalité de l'application cat
dans Unix.
Je voudrais éviter les solutions où je dois explicitement lire les deux fichiers dans des variables, concaténer les variables ensemble, puis écrire la variable concaténée.
J'essaie de reproduire la fonctionnalité de l'application cat
dans Unix.
Je voudrais éviter les solutions où je dois explicitement lire les deux fichiers dans des variables, concaténer les variables ensemble, puis écrire la variable concaténée.
Il suffit d'utiliser le Get-Content
et Set-Content
cmdlets :
Get-Content inputFile1.txt, inputFile2.txt | Set-Content joinedFile.txt
Vous pouvez également concaténer plus de deux fichiers avec ce style.
Si les fichiers sources sont nommés de manière similaire, vous pouvez utiliser des caractères génériques :
Get-Content inputFile*.txt | Set-Content joinedFile.txt
Note 1 : PowerShell 5 et les versions antérieures permettaient de le faire de manière plus concise en utilisant les alias suivants cat
et sc
pour Get-Content
et Set-Content
respectivement. Cependant, ces alias sont problématiques car cat
est une commande système dans les systèmes *nix, et sc
est une commande système dans les systèmes Windows - leur utilisation n'est donc pas recommandée, et en fait sc
n'est même plus défini à partir de PowerShell Core (v7). L'équipe PowerShell recommande de ne pas utiliser d'alias en général .
Note 2 : Soyez prudent avec les caractères de remplacement - si vous essayez d'envoyer la sortie à inputFiles.txt
(ou similaire qui correspond au modèle), PowerShell va entrer dans une boucle infinie ! (Je viens de le tester.)
Note 3 : Sortie vers un fichier avec >
ne préserve pas l'encodage des caractères ! C'est pourquoi l'utilisation de Set-Content
est recommandé.
Au cas où quelqu'un voudrait itérer sur des fichiers avec la fonction Get-ChildItems | Foreach-Object la construction, vous pourriez vouloir utiliser Add-Content au lieu de Set-Content. Sinon, le fichier cible est écrasé à chaque itération.
Notez que par défaut Set-Content
utilise la page de code nationale (par exemple, Windows-1252 pour l'anglais). Si les fichiers sources contiennent un autre codage (par exemple Windows-1251 ou UTF8), vous devez définir le codage correct. sc file.txt -Encoding UTF8
(les numéros tels que 1251 pour le russe sont supportés depuis la v6.2)
@Jonas Le problème avec Add-Content
est que si vous exécutez la commande deux fois, le fichier agrégé est deux fois plus long. Une bonne solution de remplacement est Out-File
. Exemple ici
Sur cmd
vous pouvez le faire :
copy one.txt+two.txt+three.txt four.txt
En PowerShell, ce serait :
cmd /c copy one.txt+two.txt+three.txt four.txt
Alors que la méthode PowerShell serait d'utiliser gc le système ci-dessus sera assez rapide, surtout pour les gros fichiers. Et on peut l'utiliser sur des sites autres que ASCII aussi en utilisant le /B
interrupteur.
Vous pourriez utiliser le Add-Content cmdlet. Elle est peut-être un peu plus rapide que les autres solutions, car je ne récupère pas le contenu du premier fichier.
gc .\file2.txt| Add-Content -Path .\file1.txt
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.