Convertir un fichier de Windows en UNIX via Powershell ou Batch

J’ai un script de commandes qui invite l’utilisateur à entrer des données, puis génère quelques fichiers que j’utilise dans un environnement AIX. Ces fichiers doivent être au format UNIX (ce qui je pense est UTF8), mais je cherche une orientation sur la manière la plus SIMPLE de le faire.

Je n’aime pas avoir à télécharger des logiciels supplémentaires; Cygwin ou GnuWin32. Cela ne me dérange pas de coder ceci si c’est possible, mes options de codage sont Batch, Powershell et VBS. Est-ce que quelqu’un sait comment faire cela?

Puis-je créer les fichiers avec Batch et appeler un script Powershell pour les réformer?

L’idée ici est qu’un utilisateur serait invité à fournir des informations, puis je produis un fichier standard qui est essentiellement une réponse rapide dans AIX pour un travail. J’utilise initialement Batch, parce que je ne savais pas que je me heurterais à ce problème, mais je suis plutôt intéressé à le refaire dans Powershell. parce que j’avais trouvé du code sur un autre forum capable de faire la conversion (ci-dessous).

% foreach($i in ls -name DIR/*.txt) { \ get-content DIR/$i | \ out-file -encoding utf8 -filepath DIR2/$i \ } 

Vous cherchez une direction ou une consortingbution à ce sujet.

Vous ne pouvez pas faire cela sans outils externes dans les fichiers de commandes.

Si tout ce dont vous avez besoin est le codage de fichier, l’extrait de code que vous avez fourni devrait fonctionner. Si vous voulez convertir les fichiers en ligne (au lieu de les écrire ailleurs), vous pouvez le faire

 Get-ChildItem *.txt | ForEach-Object { (Get-Content $_) | Out-File -Encoding UTF8 $_ } 

(les parenthèses autour de Get-Content sont importantes) Cependant, cela va écrire les fichiers dans UTF-8 avec une signature au début (U + FEFF) que certains outils Unix n’acceptent pas (même si techniquement légal, mais déconseillé à utilisation).

Ensuite, il y a le problème que les sauts de ligne sont différents entre Windows et Unix. Unix utilise uniquement U + 000A (LF) alors que Windows utilise deux caractères pour cela: U + 000D U + 000A (CR + LF). Donc, idéalement, vous convertissez également les sauts de ligne. Mais cela devient un peu plus complexe:

 Get-ChildItem *.txt | ForEach-Object { # get the contents and replace line breaks by U+000A $contents = [IO.File]::ReadAllText($_) -replace "`r`n?", "`n" # create UTF-8 encoding without signature $utf8 = New-Object System.Text.UTF8Encoding $false # write the text back [IO.File]::WriteAllText($_, $contents, $utf8) } 

Essayez la version surchargée ReadAllText (Ssortingng, Encoding) si vous utilisez des caractères ANSI et pas seulement des caractères ASCII.

 $contents = [IO.File]::ReadAllText($_, [Text.Encoding]::Default) -replace "`r`n", "`n" 

https://msdn.microsoft.com/en-us/library/system.io.file.readalltext(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx
ASCII – Obtient un encodage pour le jeu de caractères ASCII (7 bits).
Par défaut – Obtient un encodage pour la page de codes ANSI actuelle du système d’exploitation.