Показать полную графическую версию : [решено] что делать если bat в ascii а в пути к файлам папки с unicode именами?
всем доброго времени суток.
есть ли способ обойти проблему?
Покажите код пакетного файла.
я ещё в процессе но проблемная часть выглядит приблизительно так:
X:\FolderWithUnicodeName\setup.exe
в принципе варианты решения есть (например link or hardlink).
но мне интересно как поступают профессионалы.
vsuwi, вы случаем не усложняете вопрос?
Юникодные имена — имеются в виду лишь имена на кириллице, типа "Вася", "Маша", "Мои любимые фильмы" — или в т.ч. имена на французском, немецком, испанском и т.д., имеющих каждый свои собственные символы с надстрочными знаками?
http://i.imgur.com/A3zQfGF.png
вот пример.
vsuwi, а при чём тут юникод в пути к файлу??
В вашем примере сам файл содержит юникодные символы, которые будут потеряны.
Используйте не рудиментарный Блокнот, а редакторы, которые нормально работают с юникодом.
блокнот умеет сохранять в юникоде но тогда батники не работают.
во всяком случае у меня на вин 10.
http://i.imgur.com/9nXkb14.png
на батник в юникоде винда ругается.
vsuwi
Тэк-с... Т.е. вы показали не результат работы батника — а результат сохранения текста батника (в тексте которого единственная строка, содержащая латиницу и кириллицу).
Вы эту строку сами вбивали — или откуда-то копировали? Поскольку зрительно тут текст на чистом русском. Который для батника надо сохранять в кодировке DOS (OEM с кодовой страницей 866), а не ANSI (Windows-1251): иначе, даже когда вы поставите в языковых настройках язык для не-юникодовых программ "Russian" вместо, судя по всему, стоящего сейчас "English (US)" — батник не заработает.
диспозиция: 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.
я найду решение это очевидно но я хочу уметь как профессионалы.
я найду решение это очевидно »
Я вам его уже привёл.
Батники, содержащие русские имена, необходимо сохранять в кодировке 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.
не работает. воспроизвожу по пунктам:
открываю 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 что положено делать?
code page 437 + 866 что положено делать? »
Вся "чистая" латиница страницы 437 имеет коды от 0x00 до 0x7F и является подмножеством страницы 866: кириллица в странице 866 находится в верхней половине таблицы и имеет коды с 0x80 до 0xFF.
Но вот если используется и верхняя половина страницы 437, т.е. коды с надстрочными знаками типа немецких умляутов, то тут не подскажу. Видимо переходить с батников на Winows Sripting или, возможно, на PowerShell. Но это уже без меня. :)
надо CHCP 866 объявить »
Угу, это как раз вместо того, чтобы переключать язык для неюникодных программ. В вашем F:\æ»αáó¬¿\calc.bat » вы видите как раз символы из верхней половины 437 страницы, вместо кириллицы.
нашел решение по поводу 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.