2

Я хочу сделать очень простую вещь: скопировать файл.
Copy - простая (и фундаментальная) команда. Это должно быть легко, но это кажется сложным, когда дело доходит до имен файлов Unicode (с использованием English XP , cmd.exe и сценария .cmd ).
Мне удалось создать файл .cmd с именами файлов Unicode, как показано ниже

    :: To create the final .cmd script
    :: 
       set SRCE=D:\_cmd\cpp
       set DEST=H%SRCE:~1%

       cmd.exe /U /c DIR /A:-D /s /b "%SRCE%" >"SRCE.UTF16" 
       cmd.exe /U /c DIR /A:-D /s /b "%DEST%" >"DEST.UTF16" 

       ConvUTF.exe  1628 "DEST.UTF16" "DEST.UTF-8"
       ConvUTF.exe  1628 "SRCE.UTF16" "SRCE.UTF-8"

    :: Then, with `sed.exe`, `diff.exe`, and `ConvUTF.exe` again...
    :: the resulting UTF-8 (or UTF16) .cmd file looks like this...
    :: 
       copy "D:\_cmd\cpp\ā.क.test" "H:\_cmd\cpp\"  

Команда copy отлично работает, когда я запускаю ее непосредственно в command prompt , но не работает, когда используется в сценарии .cmd .
Ошибки UTF-8 .cmd : The system cannot find the file specified
UTF16 .cmd не проходит первый NULL-байт (первого символа), а просто выходит.

Есть ли способ сделать это из сценария .cmd ? (Я хочу использовать оболочку cmd.exe )
Возможно, есть служебная программа, которую можно вызвать из моего .cmd ...
Все предложения приветствуются.

PS Чтобы прояснить вопрос о Манине ... Меня не волнует, как имена файлов Unicode отображаются в окне консоли (этого просто не происходит для большинства нелатинских букв в окне cmd.exe)... Меня интересует только то, что я могу скопировать файл с буквами Unicode в своем имени файла - через пакетный "скрипт" .cmd.

1 ответ1

1

Сохраните пакетный файл UTF-8 без спецификации в начале, что приведет к отключению cmd . Кроме того, cmd не поддерживает Unicode, когда дело касается пакетных файлов. Вы должны положить

chcp 65001

в пакет в начале, чтобы переключиться на UTF-8, который должен позволить вашим символам Юникода быть прочитанными и обработанными правильно. Единственным недостатком является то, что это изменение сохраняется даже после выхода из пакетного файла, и, следовательно, вы застряли с оболочкой в UTF-8. Вы можете сохранить предыдущую кодовую страницу и восстановить ее в конце, если это создает проблему.

Также может помочь изменение шрифта консоли на шрифт TrueType, поскольку известно, что несколько внутренних команд демонстрируют проблемы Unicode с растровыми шрифтами (причина, по которой for /f over dir вообще такая глупая идея).

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