Войти

Показать полную графическую версию : [решено] что делать если bat в ascii а в пути к файлам папки с unicode именами?


vsuwi
30-08-2016, 14:58
всем доброго времени суток.
есть ли способ обойти проблему?

Iska
30-08-2016, 16:34
Покажите код пакетного файла.

vsuwi
30-08-2016, 21:30
я ещё в процессе но проблемная часть выглядит приблизительно так:

X:\FolderWithUnicodeName\setup.exe

в принципе варианты решения есть (например link or hardlink).
но мне интересно как поступают профессионалы.

mwz
30-08-2016, 21:56
vsuwi, вы случаем не усложняете вопрос?

Юникодные имена — имеются в виду лишь имена на кириллице, типа "Вася", "Маша", "Мои любимые фильмы" — или в т.ч. имена на французском, немецком, испанском и т.д., имеющих каждый свои собственные символы с надстрочными знаками?

vsuwi
30-08-2016, 22:15
http://i.imgur.com/A3zQfGF.png
вот пример.

mwz
30-08-2016, 22:38
vsuwi, а при чём тут юникод в пути к файлу??

В вашем примере сам файл содержит юникодные символы, которые будут потеряны.

Используйте не рудиментарный Блокнот, а редакторы, которые нормально работают с юникодом.

vsuwi
30-08-2016, 22:43
блокнот умеет сохранять в юникоде но тогда батники не работают.
во всяком случае у меня на вин 10.

http://i.imgur.com/9nXkb14.png
на батник в юникоде винда ругается.

mwz
30-08-2016, 22:57
vsuwi

Тэк-с... Т.е. вы показали не результат работы батника — а результат сохранения текста батника (в тексте которого единственная строка, содержащая латиницу и кириллицу).

Вы эту строку сами вбивали — или откуда-то копировали? Поскольку зрительно тут текст на чистом русском. Который для батника надо сохранять в кодировке DOS (OEM с кодовой страницей 866), а не ANSI (Windows-1251): иначе, даже когда вы поставите в языковых настройках язык для не-юникодовых программ "Russian" вместо, судя по всему, стоящего сейчас "English (US)" — батник не заработает.

vsuwi
30-08-2016, 23:40
диспозиция: windows 10 - local: British English.
мои действия и результат:
1) открыл блокнот ввел F:\Example\calc.bat
1.1) сохранил в ANSI
result: исполняется calc.bat
всё отлично!
2) открыл блокнот ввел F:\Справки\calc.bat
2.1) при попытке сохранить батник ругается на юникод и предлагает при сохранении выбрать юникод а иначе данные будут потеряны.
2.2) батник сохранённый в юникод не работает в принципе.
примеры:
bat file saved with unicode+folder name in path with unicode: F:\Справки\calc.bat
pause>nul
result: C:\Users\me\Documents\D3TEMP>F:\Справки\calc.bat
The filename, directory name, or volume label syntax is incorrect.
bat file saved with unicode+folder with ANSI name:
F:\Example\calc.bat
pause>nul
result:
C:\Users\me\Documents\D3TEMP>F:\Example\calc.bat
The filename, directory name, or volume label syntax is incorrect.

я найду решение это очевидно но я хочу уметь как профессионалы.

mwz
31-08-2016, 00:33
я найду решение это очевидно »

Я вам его уже привёл.
Батники, содержащие русские имена, необходимо сохранять в кодировке DOS с кодовой страницей 866.
И не забывать брать имена с путями, содержащие пробелы, в двойные кавычки.
Т.е. не просто c:\users\Вася Пупкин\Рабочий Стол\text.txt, а "c:\users\Вася Пупкин\Рабочий Стол\text.txt" (а правила хорошего тона вообще рекомендуют использовать кавычки даже при отсутствии пробелов).

Это всё.

windows 10 - local: British English »

Локаль здесь не при чём. При любой локали язык для неюникодных программ выбирается самостоятельно и не влияет на основной интерфейс.

Привожу скриншот с русской версии Win-10 — но, думаю, на английской проделать по образцу будет несложно:

http://mwz-ru.homeserver.com/tests/non-unicode_sm.gif (http://mwz-ru.homeserver.com/tests/non-unicode.gif)

После того, как вы измените здесь язык на русский — Блокнот ваш при сохранении перестанет ругаться.
Но вас это не спасёт, поскольку Блокнот не умеет сохранять в кодовой странице 866.
Я для этих целей использую AkelPad — но могу назвать ещё с десяток-другой текстовых редакторов, которые, в отличие от Блокнота, сохраняют в формате массы кодовых страниц, в т.ч. в 866.

PS
Не пробовал, но скорее всего даже язык неюникодных программ можно не трогать — а просто сохранять в кодировке 866. Используя не рудиментарный Блокнот, а чуть более продвинутый текстовый редактор. Да даже MS Word умел сохранять в 866.

vsuwi
31-08-2016, 08:30
не работает. воспроизвожу по пунктам:
открываю Notepad++ >Encoding >Character sets >Cyrillic >OEM 866 (надпись внизу меняется на DOS\Windows OEM 866)
далее копирую путь F:\Справки\calc.bat (когда пишешь с клавиатуры результат тот же) и вставляю в бат.
сохраняю и запускаю:
C:\Users\me\Documents\D3TEMP>F:\æ»αáó¬¿\calc.bat
The system cannot find the path specified.
UPD: с русскими папками разобрался. надо CHCP 866 объявить.
но моя проблема не с русским а с юникодом.
в случае если в названии папки два языка допустим "справки_Export" то есть code page 437 + 866 что положено делать?

mwz
31-08-2016, 08:53
code page 437 + 866 что положено делать? »

Вся "чистая" латиница страницы 437 имеет коды от 0x00 до 0x7F и является подмножеством страницы 866: кириллица в странице 866 находится в верхней половине таблицы и имеет коды с 0x80 до 0xFF.

Но вот если используется и верхняя половина страницы 437, т.е. коды с надстрочными знаками типа немецких умляутов, то тут не подскажу. Видимо переходить с батников на Winows Sripting или, возможно, на PowerShell. Но это уже без меня. :)

надо CHCP 866 объявить »

Угу, это как раз вместо того, чтобы переключать язык для неюникодных программ. В вашем F:\æ»αáó¬¿\calc.bat » вы видите как раз символы из верхней половины 437 страницы, вместо кириллицы.

vsuwi
31-08-2016, 15:13
нашел решение по поводу code pages - надо запускать cmd с ключом /u
вот так:start "UNICODE" cmd /u
и тогда работает навигация. создал такую жуть:
"C:\Users\me\Documents\D3TEMP\˂˃❰❱❮❯❬❭⟨⟩⟦⟧⟪⟫⧼⧽⦂⧵⧶⧷⧸⧹⻄⻖⻆⾸㊶㊷ꉄꉅꉆꉇꔘ𓅃🃃🃇🃏🐒🐑ĂăijĴΥΦΣБВГ҉הדרڣڤڥ᠁᠂᠃᠄\˂˃ ❰❱❮❯❬❭⟨⟩⟦⟧⟪⟫⧼⧽⦂⧵⧶⧷⧸⧹⻄⻖⻆⾸㊶㊷ꉄꉅꉆꉇꔘ𓅃🃃🃇🃏🐒🐑ĂăijĴΥΦΣБВГ҉הדרڣڤڥ᠁᠂᠃᠄+.bat"
в консоли корректно не отражает но исполняет без проблем. осталось найти способ засунуть всё в один скриптик.

upd:
CHCP 65001
"C:\Users\me\Documents\D3TEMP\˂˃❰❱❮❯❬❭⟨⟩⟦⟧⟪⟫⧼⧽⦂⧵⧶⧷⧸⧹⻄⻖⻆⾸㊶㊷ꉄꉅꉆꉇꔘ������������ĂăijĴΥΦΣБВГ҉הדרڣڤڥ᠁ ᠂᠃᠄\˂˃❰❱❮❯❬❭⟨⟩⟦⟧⟪⟫⧼⧽⦂⧵⧶⧷⧸⧹⻄⻖⻆⾸㊶㊷ꉄꉅꉆꉇꔘ������������ĂăijĴΥΦΣБВГ҉הדרڣڤڥ᠁᠂᠃᠄+.bat"
вполне себе работает.

спасибо mwz, что подсказали куда копать.




© OSzone.net 2001-2012