fritzm1
Goto Top

Viele CSV-Dateien per Batch in ANSI konvertieren

Hallo zusammen,

ich habe in zahllosen Unterordnern mehrere Millionen CSV-Dateien im UCS-2 LE BOM-Format und muss diese in das ANSI-Format konvertieren.
Es sind immer 12 Dateien in einem Verzeichnis, die immer gleich heißen.
Weil's manuell nicht geht, muss das per Batch-Datei und ich habe schon mal damit begonnen, die CSV-Dateien wie folgt zu konvertieren:

@echo off

dir *.csv /b /s > fileslist.txt

for /f "tokens=*" %%a in (fileslist.txt) do powershell -Executionpolicy ByPass -Command "gc '%%a' | set-content '%%a_ANSI.csv' -Encoding Default"  

Allerdings habe ich 2 Probleme:

1. Die neuen Dateien haben die Endung "_ANSI.csv", ich würde aber lieber die alten Dateien überschreiben.

2. Eine der 12 Dateien in den Verzeichnissen mit einem Dateinamen von 21 Zeichen wird jeweils nicht mit konvertiert. Vermutlich ist der Dateiname zu lang.

Jemand eine Idee?
Für Hilfe bin ich schonmal im Voraus dankbar! ;)

Viele Grüße

Content-Key: 575552

Url: https://administrator.de/contentid/575552

Printed on: April 26, 2024 at 06:04 o'clock

Mitglied: 144260
144260 May 29, 2020 updated at 13:25:49 (UTC)
Goto Top
for /f "tokens=*" %%a in (fileslist.txt) do powershell
Aua nee, für jede Datei eine extra eine neue PS Session auf zu machen, da wächst dir ein 300 Meter Bart bis das feddich is face-smile, dann doch lieber gleich die Schleife in die PS verlegen.

Würd ich bei der Menge zwar mit inconv machen (um Jahre schneller), aber naja die Winblows-Knechte sind ja meistens nicht zu belehren face-wink
powershell -EP ByPass -C "gci '.\*.csv' -File -Recurse | %%{(gc $_.FullName -ReadCount 1000) | sc $_.FullName -Encoding Default}"  
Member: fritzm1
fritzm1 May 29, 2020 at 13:05:54 (UTC)
Goto Top
Vielen Dank!
Stimmt, haste recht. face-smile

Mit inconv ginge es schneller?

Ja, doch: Belehre mich! face-wink
Mitglied: 144260
144260 May 29, 2020 updated at 13:08:08 (UTC)
Goto Top
Member: fritzm1
fritzm1 May 29, 2020 updated at 13:20:25 (UTC)
Goto Top
Zitat von @144260:
Aua nee, für jede Datei eine extra eine neue PS Session auf zu machen, da wächst dir ein 300 Meter Bart bis das feddich is face-smile, dann doch lieber gleich die Schleife in die PS verlegen.

Wie krieg ich die Schleife da am Besten rein?
Hab das so empfohlen bekommen, aber bei der Masse an Daten ist das wohl zu groß...

Manche Dateien konvertiert er jetzt in ANSI und manche in UTF-8...?
Mitglied: 144260
144260 May 29, 2020 updated at 13:32:17 (UTC)
Goto Top
Zitat von @fritzm1:
Wie krieg ich die Schleife da am Besten rein?
Is sie doch schon face-smile.
Manche Dateien konvertiert er jetzt in ANSI und manche in UTF-8...?
Es gilt was für [System.Text.Encoding]::Default im OS definiert ist ...

Machs besser gleich mit "iconv", ist besser für die nerven und spart obendrein wie gesagt jede Menge Zeit und ist zuverlässiger. Du willst ja nicht hinterher noch in Millionen Dateien manuell rein schauen oder?
Member: fritzm1
fritzm1 May 29, 2020 updated at 13:43:51 (UTC)
Goto Top
Zitat von @144260:

Zitat von @fritzm1:
Wie krieg ich die Schleife da am Besten rein?
Is sie doch schon face-smile.
Stimmt. face-smile
Wie kann ich die jeweilige Datei anzeigen lassen, die er gerade konvertiert?
Hab da mit echo was ergänzt, das hat nicht funktioniert... face-sad

Zitat von @144260:
Manche Dateien konvertiert er jetzt in ANSI und manche in UTF-8...?
Es gilt was für [System.Text.Encoding]::Default im OS definiert ist ...

Machs besser gleich mit "iconv", ist besser für die nerven und spart obendrein wie gesagt jede Menge Zeit und ist zuverlässiger. Du willst ja nicht hinterher noch in Millionen Dateien manuell rein schauen oder?
Hm, ja, aber so wie ich das sehe läuft "iconv" nur unter Linux, nix Windows, oder...?
Mitglied: 144260
Solution 144260 May 29, 2020 updated at 13:45:54 (UTC)
Goto Top
Zitat von @fritzm1:
Wie kann ich die jeweilige Datei anzeigen lassen, die er gerade konvertiert?
Einfach n -Verbose hinten dran pappen ... oder per write-host ausgeben lassen.
powershell -EP ByPass -C "gci '.\*.csv' -File -Recurse | %%{(gc $_.FullName -ReadCount 1000) | sc $_.FullName -Encoding Default -verbose}"  
Hab da mit echo was ergänzt, das hat nicht funktioniert... face-sad
Nicht dumm rum probieren ==> RTFM!
Hm, ja, aber "iconv" läuft nur unter Linux, nix Windows, oder so wie ich das sehe...
Quatsch mit Soße, läuft auch unter Winblows.
https://dbaportal.eu/2012/10/24/iconv-for-windows/
usw...
Member: fritzm1
fritzm1 May 29, 2020 at 13:52:40 (UTC)
Goto Top
Zitat von @144260:

Zitat von @fritzm1:
Wie kann ich die jeweilige Datei anzeigen lassen, die er gerade konvertiert?
Einfach n -Verbose hinten dran pappen ... oder per write-host ausgeben lassen.
> powershell -EP ByPass -C "gci '.\*.csv' -File -Recurse | %%{(gc $_.FullName -ReadCount 1000) | sc $_.FullName -Encoding Default -verbose}"  
> 

Perfekt! Sehr genial! Vielen Dank!

Hab da mit echo was ergänzt, das hat nicht funktioniert... face-sad
Nicht dumm rum probieren ==> RTFM!

Jaja... face-smile face-smile face-smile
Keine Zeit. face-smile

Hm, ja, aber "iconv" läuft nur unter Linux, nix Windows, oder so wie ich das sehe...
Quatsch mit Soße, läuft auch unter Winblows.
https://dbaportal.eu/2012/10/24/iconv-for-windows/
usw...

Ok, werd' ich mir mal anschauen, wenn ich Zeit habe... face-wink
Du.... hast Du nicht zufällig grad ne Lösung?
Das wird kein Einzeiler werden, oder?

Hab grad nochmal geschaut, es sind über 21 Mio. Dateien... face-sad face-smile

Auf jeden Fall schonmal vielen Dank!
Mitglied: 144260
144260 May 29, 2020 updated at 14:11:08 (UTC)
Goto Top
Zitat von @fritzm1:
Jaja... face-smile face-smile face-smile
Keine Zeit. face-smile
Aber mit der Zeit in nem Forum rum eiern geht offensichtlich face-big-smile
Das wird kein Einzeiler werden, oder?
Wieso nicht face-smile?
find /your/path -type f -name '*.csv' -exec iconv -f UCS-2LE -t cp1252 "{}" -o "{}" \;  

ab grad nochmal geschaut, es sind über 21 Mio. Dateien...
Na dann viel Spaß noch, back erst mal ein paar kleinere Brötchen... i'm out