Как записать имя файла Windows с именем в командной строке?

555
Kjell Rilbe

Мне нужно написать командную строку в командной строке, которая ссылается на файл, содержащий имя в имени, но я не могу понять, как это правильно. В Windows должна быть установлена ​​кодовая страница win1252, а в командной строке - oem850.

Конкретное имя файла:

Förändringar.txt 

Я был в состоянии использовать, dir /xчтобы получить короткое имя файла 8.3 и использовать его, но это мешает мне быть не в состоянии получить правильное длинное имя ...

Обновить:

Комментарии привели меня к выводу, что это не проблема с командной строкой ( cmd.exeчтобы уточнить). Кажется, это проблема с конкретным консольным приложением, которое я пытался запустить ( gfix.exeиз менеджера баз данных Firebird). Очевидно, он не может правильно преобразовать аргументы командной строки из кодовой страницы консоли во все, что нужно для внутреннего использования.

0
На какой версии Windows вы используете и какой интерфейс командной строки (command.com (надеюсь, что нет), cmd.exe, powershell, что-нибудь стороннее?) Вы используете? У меня никогда не было ничего похожего на проблему, которую вы описываете, и это заставляет меня поверить, что вы делаете что-то необычное. Пожалуйста ** [редактировать] ** ваш вопрос, чтобы уточнить. a CVn 9 лет назад 0
äöüÄÖÜ отлично работает здесь с cmd.exe, dir и ren, так что именно не работает должным образом? Werner Henze 9 лет назад 0
Ага, простите Я думаю, что это не проблема командной строки (cmd.exe), а проблема с реальным консольным приложением, которое я пытался вызвать. Кажется, он не может правильно преобразовать имя файла из аргументов командной строки из кодовой страницы консоли. Я думаю, мне придется проверить с разработчиками приложений. (Это утилита gfix менеджера баз данных Firebird.) Kjell Rilbe 9 лет назад 0
Пожалуйста, [отредактируйте] свой вопрос и покажите фрагмент кода, удовлетворяющий правилам [Минимальный, Полный и Проверяемый пример] (http://stackoverflow.com/help/mcve), и укажите, запускаете ли вы `gfix.exe` из чистого` cmd `или из пакетного скрипта. Используйте `chcp 1257` или` chcp 1254` перед запуском `gfix.exe` из открытого окна` cmd`. Проще говоря: используйте `chcp` для кодовой страницы, где определены все символы` åäö`. JosefZ 7 лет назад 0

1 ответ на вопрос

-1
MSalters

Обычная командная строка в Windows - CMD.EXE. Это программа Unicode. В Юникоде нет необходимости в таких вещах, как «Win1252» и «OEM850».

Я подозреваю, что вы используете пакетные файлы, поскольку они могут быть не в Юникоде. CMD.EXE будет понимать пакетные файлы, которые не в Unicode, но избегать их при использовании символов не ASCII. Просто используйте пакетные файлы Unicode.

К сожалению, если не cmd.exe, то, по крайней мере, сама консоль Windows по-прежнему использует кодовые страницы и по сей день, и хотя программы _can_ выводят Unicode, они должны стараться изо всех сил. (Я имел дело с этим в течение десятилетия и просто повторно протестировал на новой системе Server 2012 R2, чтобы убедиться.) Встроенная команда CMD `dir` показывает только вопросительные знаки для символов вне текущей кодовой страницы OEM (как показано `chcp`), и сама консоль не позволяет мне вводить их (например, нажатие` ąčęė` приводит к появлению `acee`, если кодовая страница не 775). PowerShell тоже не понимает этого. grawity 9 лет назад 0
@ Grawity: я не думаю, что это так. Знаки вопроса не являются результатом кодовых страниц, это результат использования шрифта без символов. Программы не должны делать что-то особенное для консоли, `WriteConsole` отображается на` WriteConsoleW` (широкий) для программ Unicode. Так же, как `MessageBox`->` MessageBoxW`. MSalters 9 лет назад 1
Хм, похоже, ты прав насчет шрифта. Я не могу поверить, что я забыл, что _again_. Я продолжаю открывать это каждые несколько месяцев ... grawity 9 лет назад 0