На обычном (западном) компьютере с Windows у меня есть файл

файл.txt

с не ASCII буквами в имени файла. Как я могу сделать следующее из .bat файла?

dir файл.txt
ren файл.txt file.txt

так далее.?

Я попытался поместить вышеуказанные команды в файл mybat.bat (используя кодировку UTF-8 или UTF-16), но он не работает, даже если я запускаю его как cmd /u /c mybat.bat .

Примечание: вопрос не в том, как поместить эти буквы в командный файл, а в том, как заставить командный файл делать то, что ожидается (в моем примере, чтобы вывести файл и затем переименовать его).

Примечание: команда dir > log.txt показывает файл файл.txt как ???. Txt. Однако dir правильно показывает этот файл на экране как файл.txt.

1 ответ1

1

Ваша основная проблема - шрифт https://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-tring-to-display-hebrew. С правильным шрифтом вы не будете получить вопросительные знаки Поэтому вы должны добавить Courier New в командную строку. Тогда вы сможете набирать или отображать / отображать такие символы.

Если вы обнаружите, что некоторые команды имеют проблемы, попробуйте chcp 65001 (отвечая на ваш вопрос, будьте уверены, что chcp 65001 повлияет только на это окно приглашения cmd). Чтобы перенаправление работало с символами, выходящими за пределы \u7F, вам потребуется chcp 65001, например, для команды dir >asdf для записи файла с этими символами потребуется chcp 65001. Но ваша команда ren отлично работает без 65001.

Примечание - OP указывает на исправление к этому .. Его шрифт был в порядке .. Но он нуждался в ЧКП 65001.

Другой случай, когда требуется chcp 65001, это когда пакетный файл находится в utf8. В противном случае, даже выполнив командный файл с такими буквами, как привет, они будут преобразованы в знаки вопроса.

OP также указывает на отличный обходной путь для проблемы, которую блокнот сохраняет с utf-8 с BOM, тогда как chcp 65001 - это UTF-8 без BOM. И если у вас есть пакетный файл, закодированный как utf-8 с bom, который говорит просто, например, dir или echo привет, он не будет работать, даже если cmd имеет кодировку 65001. Потому что cmd смешивает спецификацию в первую строку. Таким образом, обходной путь должен поставить команду (ы), начиная со второй строки. (В качестве альтернативы можно использовать текстовый редактор, который сохраняет как UTF-8 без спецификации).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .