grotlovin
Goto Top

Mit Batch .csv Datei in UTF-8 erstellen

Hallo zusammen,
ich bin noch sehr neu im Bereich Batch-Skripte und habe ein Problem, dass ich nicht gelöst bekomme.
Ich habe ein Skript erstellt, das mehrere Daten aus Active Directory ausliest, und anschließend in .txt und .csv Dateien ausgibt.
Nun werden in den .txt Dateien alle Buchstaben korrekt dargestellt (äöüß), in der .csv allerdings nicht. Als zweite Zeile in meinem Skript habe ich den Befehl

"chcp 65001"

gesetzt.
Die Ausgabe funktioniert jeweils mit

"echo %Ausgabe% > %Dateiname%.txt"
"echo %Ausgabe% > %Dateiname%.csv"

Muss ich bei .csv Dateien etwas spezielles beachten oder ist es da eventuell gar nicht möglich?
Danke für die Hilfe

Content-Key: 7298585988

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

Printed on: May 10, 2024 at 15:05 o'clock

Mitglied: 6376382705
Solution 6376382705 May 25, 2023 at 05:51:49 (UTC)
Goto Top
Hi.

neu im Bereich Batch-Skripte
Ich weiß nicht was Du genau vor hast aber wenn Du dich bereits an Batch heranwagst, wäre es vielleicht sinnig sich von der steinaltsprache Batch einfach zu trennen und direkt mit Powershell anzufangen. Da wäre dein Problem relativ einfach gelöst.

[content:264228]
Anbei ein Link aus dem Forum hier, vielleicht hilft Dir das weiter bzw. kannst das ein wenig adaptieren.

Gruß
Mitglied: 7010350221
Solution 7010350221 May 25, 2023 updated at 06:37:43 (UTC)
Goto Top
Muss ich bei .csv Dateien etwas spezielles beachten oder ist es da eventuell gar nicht möglich?
Eine csv ist erst mal auch nur eine reine Textdatei nur die Dateiendung ist anders. Du musst aber sicherstellen das deine Anwendung die die CSV einliest auch das richtige Encoding für die Interpretation der Daten verwendet, automatische Erkennung ist oft nicht zuverlässig, dann musst du manuell in der jeweiligen Anwendung für den Import auf UTF8 umstellen.
Besser ist es wie gesagt gleich auf Powershell umzusteigen, damit ist das Handling beim Encoding wesentlich konsistenter und man hat auch die Möglichkeit Dateien mit einem BOM zu versehen was der Anwendung explizit mitteilt welches Encoding verwendet wird, sofern die Anwendung damit klar kommt. Bei Batch gibt es da einige Fallen was das Encoding angeht weil nicht alle dort verfügbaren Befehle das eingestellte Encoding der Konsole beachten.

Gruß
Member: Winfried-HH
Solution Winfried-HH May 25, 2023 updated at 06:35:35 (UTC)
Goto Top
Zitat von @grotLovin:

Nun werden in den .txt Dateien alle Buchstaben korrekt dargestellt (äöüß), in der .csv allerdings nicht. Als zweite Zeile in meinem Skript habe ich den Befehl

Womit öffnest Du die CSV, um zu der Feststellung zu kommen, dass es da nicht geklappt hat? Falls per Doppelklick mit Excel: Da habe ich es auch oft, dass er Umlaute aus einer CSV-Datei falsch umsetzt. Das klappt mit LibreOffice besser. Da ich beides auf dem Rechner habe, öffene ich die CSV in solchen Fällen erst mit LibreOffice, speichere sie dort im XLSX-Format und öffne sie dann in Excel. Es geht aber natürlich auch wie Ultramatic beschrieben hat, indem man den Import manuell auf UTF-8 umstellt.
Member: grotLovin
grotLovin May 25, 2023 at 08:02:34 (UTC)
Goto Top
Vielen Dank für eure Hinweise.

Zitat von @6376382705:

Hi.

neu im Bereich Batch-Skripte
Ich weiß nicht was Du genau vor hast aber wenn Du dich bereits an Batch heranwagst, wäre es vielleicht sinnig sich von der steinaltsprache Batch einfach zu trennen und direkt mit Powershell anzufangen. Da wäre dein Problem relativ einfach gelöst.

Damit habe ich jetzt gerade angefangen. Ich hatte anfangs Probleme damit, die "Tabelle" die ich ausgebe mit Powershell so darzustellen, wie ich es möchte. Das hat mit Batch sehr einfach funktioniert. Aber ich denke, wenn ich mich tiefer mit powershell beschäftige wird das funktionieren.


Zitat von @Winfried-HH:

Zitat von @grotLovin:

Nun werden in den .txt Dateien alle Buchstaben korrekt dargestellt (äöüß), in der .csv allerdings nicht. Als zweite Zeile in meinem Skript habe ich den Befehl

Womit öffnest Du die CSV, um zu der Feststellung zu kommen, dass es da nicht geklappt hat? Falls per Doppelklick mit Excel: Da habe ich es auch oft, dass er Umlaute aus einer CSV-Datei falsch umsetzt. Das klappt mit LibreOffice besser. Da ich beides auf dem Rechner habe, öffene ich die CSV in solchen Fällen erst mit LibreOffice, speichere sie dort im XLSX-Format und öffne sie dann in Excel. Es geht aber natürlich auch wie Ultramatic beschrieben hat, indem man den Import manuell auf UTF-8 umstellt.

Ich habe es mit Excel geöffnet. Gerade mit Libre und Editor getestet, dort wird alles korrekt dargestellt.

Dann mache ich mich mal an Powershell und versuche es damit. Vielen Dank
Mitglied: 6376382705
6376382705 May 25, 2023 at 08:07:40 (UTC)
Goto Top
Dann mache ich mich mal an Powershell und versuche es damit. Vielen Dank
Gerne. Falls Du Unterstützung brauchst, meld Dich hier im Forum wieder. Es rennen hier einige PS-Pros rum, die Bock haben! face-smile

Gruß
Mitglied: 7010350221
7010350221 May 25, 2023 updated at 08:09:43 (UTC)
Goto Top
Simples Beispiel
$data = @()
$data += [pscustomobject]@{
    Spalte1 = "Daten 1"  
    Spalte2 = "Daten 2"  
}
$data += [pscustomobject]@{
    Spalte1 = "Daten 3"  
    Spalte2 = "Daten 4"  
}

$data | export-csv .\data.csv -delimiter ";" -NoTypeInformation -Encoding UTF8  

https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
Mitglied: 6376382705
6376382705 May 25, 2023 at 08:09:44 (UTC)
Goto Top
Simples Beispiel
.. ich sag ja, die ham bock! :D
Member: grotLovin
grotLovin May 25, 2023 at 08:53:04 (UTC)
Goto Top
Zitat von @7010350221:

Simples Beispiel
$data = @()
$data += [pscustomobject]@{
    Spalte1 = "Daten 1"  
    Spalte2 = "Daten 2"  
}
$data += [pscustomobject]@{
    Spalte1 = "Daten 3"  
    Spalte2 = "Daten 4"  
}

$data | export-csv .\data.csv -delimiter ";" -NoTypeInformation -Encoding UTF8  

https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...

Wow, das war überraschend einfach. Es funktioniert alles einwandfrei. Und das Skript braucht für eine größere Abfrage nun noch ca. 15 Sekunden, anstelle der 7 Minuten die das Batch Skript benötigt.
Vielen Dank