Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] что делать если bat в ascii а в пути к файлам папки с unicode именами? (http://forum.oszone.net/showthread.php?t=318311)

vsuwi 30-08-2016 14:58 2664211

что делать если bat в ascii а в пути к файлам папки с unicode именами?
 
всем доброго времени суток.
есть ли способ обойти проблему?

Iska 30-08-2016 16:34 2664234

Покажите код пакетного файла.

vsuwi 30-08-2016 21:30 2664311

я ещё в процессе но проблемная часть выглядит приблизительно так:

X:\FolderWithUnicodeName\setup.exe

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

mwz 30-08-2016 21:56 2664323

vsuwi, вы случаем не усложняете вопрос?

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

vsuwi 30-08-2016 22:15 2664329

Вложений: 1

вот пример.

mwz 30-08-2016 22:38 2664341

vsuwi, а при чём тут юникод в пути к файлу??

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

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

vsuwi 30-08-2016 22:43 2664342

блокнот умеет сохранять в юникоде но тогда батники не работают.
во всяком случае у меня на вин 10.


на батник в юникоде винда ругается.

mwz 30-08-2016 22:57 2664347

vsuwi

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

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

vsuwi 30-08-2016 23:40 2664359

диспозиция: 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 2664370

Цитата:

Цитата vsuwi
я найду решение это очевидно »

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

Это всё.

Цитата:

Цитата vsuwi
windows 10 - local: British English »

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

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



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

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

vsuwi 31-08-2016 08:30 2664412

не работает. воспроизвожу по пунктам:
открываю 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 2664418

Цитата:

Цитата vsuwi
code page 437 + 866 что положено делать? »

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

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

Цитата:

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

Угу, это как раз вместо того, чтобы переключать язык для неюникодных программ. В вашем
Цитата:

Цитата vsuwi
F:\æ»αáó¬¿\calc.bat »

вы видите как раз символы из верхней половины 437 страницы, вместо кириллицы.

vsuwi 31-08-2016 15:13 2664561

нашел решение по поводу 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, что подсказали куда копать.


Время: 18:18.

Время: 18:18.
© OSzone.net 2001-