Codierung falsch, aber alle?
moin, ich habe einen code geschrieben, der für mich ordner und deren inhalte kopieren soll, von einen Datenträger auf den anderen, quasi ein archivierungshelfer. den code schreibe ich gleich unten hin aber mir ergibt sich da folgendes problem: ich will nicht alle ordner eines verzeichnisses archivieren, sondern nur ausgewählte, dafür habe ich eine liste, in der all jene stehen, die kopiert werden sollen, mein problem dabei ist aber, dass die codierung nicht erkannt wird, egal welche! ich habe die liste in einem .txt dokument gespeichert ---- an der stelle will ich anmerken dass der code wohleher ein befehl für cmd ist --- und sämtliche mögliche codierungen ausprobiert, alle namen die kein ß,ä,ö oder ü haben, werden gelesen, erkannt und dann kopiert, so wie es sein soll, aber durch die codierung sucht er z.b. statt nach einem ü nach einer hochgestellten 3 ???? (ANSI) ich weiß nicht mehr weiter, ich weiß nur zu 100% dass es an der codierung liegt, denn wenn ich mir die liste von cmd ausgeben lasse passiert das oben geschriebene, alles wird normal geschrieben, außer ä ö ü und ß.
was kann ich tun???
hier mein code:
set "quelle=I:\Ordner 1\ZZZTester" & set "ziel=V:\Ordner 1\TestOrdner" & set "liste=C:\Users\*mein User*\Documents\OrdnerListeTESTER.txt"
for /f "usebackq delims=" %N in ("%liste%") do (
echo Verarbeite Ordner: %N
robocopy "%quelle%\%N" "%ziel%\%N" /E /COPY:DATSO /R:3 /W:10 /MT:8 /LOG+:kopierlog.txt
)
edit: die bereits kopierten ordner sollen dann später auf dem ursprungsdatenträger inhaltlich gelöscht und umbenannt werden, dafür habe ich schon ein code snippet und das funktioniert auch, aben außer bei ß,ä,ö und ü weil das snippet auf dieselbe liste zugreift
Das hier (macht bei mir ohne viel Aufwand ähnliches wie Du brauchst schon lange) käme nicht in Frage? https://syncthing.net/
in der theorie schon, das problem ist dass der archivierungsprozess für meine firma ist und ich so ein programm nicht nutzen kann, zumal die datenmengen teilweise TB groß sind :(
3 Antworten
Hallo Kurti801!
Man kann schon Umlaute in Batch-Dateien verwenden:
Wenn z.B. ein Verzeichnis einen Umlaut enthält, wird ein Batch-Befehl unter Windows nicht korrekt ausgeführt. Im Konsolenfenster («DOS-Fenster») wird eine andere Zeichentabelle ( Codepage 1252) verwendet als in den Programmen mit grafischer Bedienoberfläche (Codepage 850).
Die DOS Codepage ist an die englische Zeichentabelle angelehnt. Sie versteht die Umlaute (ä, ö, ü) nicht.
Füge in der Batch-Datei vor dem Befehl mit dem Umlaut eine Zeile mit dem Befehl chcp 1252 ein (chcp = change code page). Damit wird die Zeichentabelle temporär auf die westeuropäische mit Nummer 1252 umgestellt.
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-kommandos?id=chcp
LG
gufrastella
CMD liest Sonderzeichen wie ä, ö, ü aus Textdateien falsch, weil es standardmäßig Codepage 850 nutzt und nicht UTF-8 oder ANSI korrekt interpretiert.
Verwende stattdessen PowerShell mit UTF-8-kodierter Liste.
Seit Windows 7 wird als TextCodierung konsequent UTF8 verwendet. Dies trifft auch auf Dateinamen zu.
Cmd/Batch ist wesentlich älter und nicht besonders kompatibel zu UTF8. Die Console (Cmd) arbeitet (hierzulande) wie vor 30Jahren noch immer mit der Codepage 850 "Multilingual (Latin I)". Um einigermaßen international kompatibel zu sein wurde Mit Windows NT die Codepage 1252 "West European Latin" präferiert . Allerdings muss man diese in der Console explizit setzen. diese musste jedoch weiterhin mit 256 Zeichen auskommen.
Mit Windows 7 wurde die Codepage 65001 (UTF8) eingeführt um auf alle Zeichen Zugriff zu haben.
Die Codepage stellt man in der Console mit dem Befehl :
chcp 65001
...auf UTF8 ein.
demo.cmd
@echo off
chcp 65001
echo Müllers Möhre wird gemäht.
echo Маша и Медведь
echo Ο Οδυσσέας ήταν ναυτικός
pause
Die Batch muss im Editor als UTF8 ohne BOM gespeichert werden.
Vergiss irgendwelche Tipps bezüglich 1252. Diese haben über 20 Jahre auf dem Buckel und wurden seither von einem Ratgeber zum anderen übernommen ohne diese zu hinterfragem.
Die Webseiten von Axel Hahn zum Thema Batch wurden seit Windows XP nicht mehr überarbeitet. Eine extrem schlechte Referenz!
Die gegenwärtig aktuellsten Beschreibungen findet man auf https://ss64.com/nt/ .
Die Codepage 1252 funktioniert zwar noch immer leidlich, ist aber ebenfalls jenseits von Gestern und erlaubt wie 850 nur 256 Zeichen.
Moderne Windowssysteme arbeiten grundsätzlich mit UTF8-Zeichensätzen!
Um alle Zeichen weitgehend zuverlässig darzustellen benötigt man die Codepage 65001. (dabei gibt es lediglich eine Einschränkung bezüglich de Zeichenumfangs des für die Console gewählte Fonts)