Символ дефиса - это кодовая точка Unicode U + 2013. В кодовой странице 1252 для Windows это символ 150. Символ û обозначает код 150 в кодовой странице 437. Таким образом, похоже, что один процесс записывает файл в кодовой странице 1252, а другой читает его, используя кодовую страницу 437.
В идеале все кодовые страницы, кроме Юникода, должны быть выброшены вместе с мировыми войнами, оспой и другими реликвиями 20-го века. К сожалению, консоль Windows делает это довольно сложно.
Поскольку кодовая страница 437 является кодовой страницей консоли по умолчанию для большинства установок Windows, я подозреваю, что именно эта настройка по умолчанию вызывает эти проблемы. (Имена файлов хранятся ОС в Unicode, так что эта часть, по крайней мере, является правильной.) Поскольку кодовая страница 437 не включает в себя символ дефиса, любая система, использующая эту кодовую страницу, должна будет использовать резервный механизм для рендеринга. имена файлов, такие как знак вопроса.
Изменив кодовую страницу консоли на что-то, поддерживающее символ «тире», например 1252, эту проблему можно исправить.
Вы можете изменить эту кодовую страницу с помощью следующей команды.
chcp 1252
Эта команда, вероятно, должна быть расположена в начале вашего командного файла.
Это ужасный взлом, который будет необходим, пока вы не сможете преобразовать свою систему в нечто современное, поддерживающее Юникод сверху вниз.
Возможно, вы захотите попробовать это в Powershell, поскольку PS поддерживает Unicode.