J'essaie de reproduire les fonctionnalités de la commande "cat" sous Unix.
Je voudrais éviter les solutions dans lesquelles je lis explicitement les deux fichiers en variables, les concatène ensemble, puis j'écris la variable concaténée.
Vous pouvez simplement utiliser cat example1.txt, example2.txt | sc examples.txt
. Vous pouvez sûrement concaténer plus de deux fichiers avec ce style également. De plus, si les fichiers portent le même nom, vous pouvez utiliser:
cat example*.txt | sc allexamples.txt
Le cat
est un alias pour Get-Content
, et sc
est un alias pour Set-Content
.
Remarque 1 : Soyez prudent avec cette dernière méthode - si vous essayez de générer en sortie examples.txt
(ou similaire qui correspond au modèle), PowerShell entrera dans une boucle infinie! (Je viens de tester cela).
Note 2 : Sortie dans un fichier avec >
ne conserve pas le codage des caractères! C'est pourquoi en utilisant Set-Content
(sc
) est recommandé.
Ne pas utiliser >
; cela gâche l'encodage des caractères. Utilisation:
Get-Content files.* | Set-Content newfile.file
Dans cmd
, vous pouvez faire ceci:
copy one.txt+two.txt+three.txt four.txt
Dans PowerShell, cela serait:
cmd /c copy one.txt+two.txt+three.txt four.txt
Bien que la méthode PowerShell consisterait à utiliser gc , la procédure ci-dessus sera assez rapide, en particulier pour les fichiers volumineux. Et il peut être utilisé sur des fichiers non - ASCII en utilisant le /B
_ commutateur.
Vous pouvez utiliser la cmdlet Add-Content . Peut-être que c'est un peu plus rapide que les autres solutions, parce que je ne récupère pas le contenu du premier fichier.
gc .\file2.txt| Add-Content -Path .\file1.txt
Pour concaténer des fichiers dans la commande Invite, il serait
type file1.txt file2.txt file3.txt > files.txt
Powershell convertit la commande type en Get-Content, ce qui signifie que vous obtiendrez une erreur lors de l'utilisation de la commande type dans powershell car la commande Get-Content nécessite une virgule séparant les fichiers. La même commande dans PowerShell serait
Get-Content file1.txt,file2.txt,file3.txt | Set-Content files.txt
Si vous devez commander les fichiers par paramètre spécifique (par exemple, date/heure):
gci *.log | sort LastWriteTime | % {$(Get-Content $_)} | Set-Content result.log
J'ai utilisé:
Get-Content c:\FileToAppend_*.log | Out-File -FilePath C:\DestinationFile.log
-Encoding ASCII -Append
Cela s'est bien passé. J'ai ajouté l'encodage ASCII) pour supprimer les caractères nuls que Notepad ++ affichait sans l'encodage explicite.
Comme la plupart des autres réponses ont souvent un formatage incorrect (à cause de la tuyauterie), la chose la plus sûre à faire est la suivante:
add-content $YourMasterFile -value (get-content $SomeAdditionalFile)
Je sais que vous vouliez éviter de lire le contenu de $ SomeAdditionalFile dans une variable, mais afin de sauvegarder, par exemple, votre mise en forme de nouvelle ligne, je ne pense pas qu'il existe un moyen approprié de le faire sans.
Une solution de contournement consisterait à parcourir votre $ SomeAdditionalFile ligne par ligne et à le transférer dans votre $ YourMasterFile. Cependant, cela nécessite trop de ressources.
Vous pouvez faire quelque chose comme:
get-content input_file1 > output_file
get-content input_file2 >> output_file
Où >
est un alias pour "out-file" et >> est un alias pour "out-file -append".
Je pense que la "manière de PowerShell" pourrait être:
set-content destination.log -value (get-content c:\FileToAppend_*.log )