Пакет Windows: параметры Unicode для команды (robo) copy - PullRequest
9 голосов
/ 16 ноября 2010

Мне нужно скопировать несколько файлов в один пакетный файл.Файлы имеют имена Unicode, которые отображаются на разные кодовые страницы.

Пример:

set ArabicFile=ڊڌڵڲڛشس
set CyrillicFile=щЖЛдЉи
set GermanFile=Bücher

copy %ArabicFile% SomePlaceElse
copy %CyrillicFile% SomePlaceElse
copy %GermanFile% SomePlaceElse

Проблема: Пакетные файлы не могут быть Unicode.

Вопрос: Как записать имена файлов Unicode в пакетный файл, чтобы команда копирования распознала их?

Примечания:

Мне все равно, как отображаются имена файлов.
На самом деле пакетный файл делает гораздо больше, чем просто копирует эти файлы, я просто упростил описание, чтобы прояснить проблему.

Исправитькомандный файл:

С ответом Арно я изменил свой командный файл следующим образом.Теперь он работает правильно, не требуя смены шрифта (что было бы грязно, как прокомментировал Арно).

@echo off

chcp 65001

set ArabicFolder=ڊڌڵڲڛشس
set CyrillicFolder=щЖЛдЉи
set GermanFolder=Bücher

robocopy /e d:\temp\test\%ArabicFolder% d:\temp\test2\%ArabicFolder% /log:copy.log
robocopy /e d:\temp\test\%CyrillicFolder% d:\temp\test2\%CyrillicFolder% /log+:copy.log
robocopy /e d:\temp\test\%GermanFolder% d:\temp\test2\%GermanFolder% /log+:copy.log

Ответы [ 3 ]

14 голосов
/ 16 ноября 2010

Если

  • Я добавляю CHCP 65001 в качестве первой строки вашего командного файла,
  • сохранить файл как UTF-8 без спецификации и
  • установить мой консольный шрифт на что-то другое, чем "Растровые шрифты" (в моем окне Win7 я могу выбрать Consolas или Lucida Console),

это работает. Просто нет? : -)

(Смена шрифта на самом деле не требуется, если вы не записываете вывод не-ASCII на консоль.)

1 голос
/ 16 ноября 2010

Я не уверен, но я думаю, что короткое (8.3) имя файла будет ASCII, так что вы могли бы обратиться к нему таким образом?Вы можете узнать короткое имя файла с помощью dir /X.

0 голосов
/ 03 августа 2016

Я хочу создать командный файл (например, RunThis.bat), который создает каталоги имен, которые могут быть русскими или другими.

Пример:
Когда DOS Windows открывается с приглашением:

D:\>md "Russia - Шпионка"

Эта работа в команде, как и имя отображаются правильно.

Но если я попробую это с помощью Блокнота и сохраню в ANSII, я не смогу.
Поэтому, если я снова использую Блокнот и сохраню в UTF-8, он будет работать, но с символами мусора.

RunThis.bat (Notepad save UTF-8), введите символы мусора.

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%

Проблема с блокнотом, который использует UTF-8 с BOM.

Чтобы сохранить .bat с использованием UTF-8 без BOM, мы должны использовать редактор, такой как Notepad ++.

RunThis.bat (Notepad ++ save UTF-8 - без спецификации )

chcp 65001
set fn14="Russia - Шпионка"
md %fn14%

На этот раз он отлично работает, когда мы запускаем «RunThis.bat» непосредственно из explorer.exe

...