Tja, du mußt einfach die selbe Codepage benutzen, mit welcher die Datei erstellt wurde,
oder andersrum in der selben Codepage schreiben, so wie es später wieder verarbeitet wird.
Am Universellsten wäre z.B. eine UTF-8- oder UTF-16-Codepage.
Gibst du aber keine Codepage an, dann wird eventuell die aktuelle Standardcodepage vom System benutzt.
Und mit etwas Pech ist sie auf einem anderen PC nicht die Gleiche, wie bei dir gerade.
PS: Das Selbe kannst du auch in einem Delphi-Consolen-Programm haben.
Normal wird dort CP_ACP für AnsiString,
ANSI-APIs, sowie Konsolen-Input/-Output genommen, also "standardmäßig" die aktuelle
ANSI-Codepage des Systems/Benutzers.
Man könnte auch CP_OEM benutzen, und hat dann das, was die BATCH standardmäßig benutzt.
Bzw. siehe
SetFileApisToOEM,
SetFileApisToANSI und
AreFileApisANSI,
sowie
SetConsoleCP und
SetConsoleOutputCP.
[add]
https://learn.microsoft.com/en-us/wi...tfileapistooem, falls es jemand übersieht.
Das interessante ist, dass der Ordner in dem die Batchdatei ausgeführt wird, selbst Umlaute enthält, und die werden in der Eingabeaufforderung korrekt dargestellt. Nur die Batchdatei scheint Probleme zu machen.
Das ist garnicht so ungewöhnlich, denn es wird ja in der "aktuellen" Codepage eingelesen und in der "selben" Codepage auch wieder ausgegeben.
Passiert auch mit Output/Input von DIR und Co.