При автоматизации рутинных задач, резервного копирования или регламентных процедур системные администраторы и разработчики часто используют запуск 1С:Предприятия через командную строку Windows и пакетные файлы (.bat или .cmd). Однако нередко возникает неприятная ситуация: скрипт отрабатывает, открывается окно авторизации 1С, но в поле имени пользователя отображаются нечитаемые символы («кракозябры»), из-за чего автоматический вход завершается ошибкой.
Проанализируем конкретный пример запуска:
"C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\BASE\1" /N"Администратор" /P"1" /C"1"
В этой строке пароль передается корректно, так как состоит из цифр, а русскоязычное имя Администратор искажается. Разберем природу этой ошибки и все возможные способы её устранения.
Интерпретатор командной строки Windows (cmd.exe) исторически работает в кодовой странице OEM (для русской локали это CP866). В то же время большинство современных текстовых редакторов сохраняют файлы скриптов в кодировках Windows-1251 (ANSI) либо UTF-8.
Когда командная строка считывает файл в кодировке ANSI или UTF-8 без предварительного переключения кодовой страницы, байты кириллических символов передаются исполняемому файлу платформы некорректно. Платформа 1С считывает переданные ей аргументы через стандартные системные вызовы Windows API (GetCommandLineW) и не занимается угадыванием нарушенной кодировки. В результате русские буквы преобразуются в искаженные знаки, и пользователь с таким именем в базе попросту не находится.
Наиболее универсальный и современный подход — явно указать командному интерпретатору, в какой кодировке сохранен скрипт, прямо перед вызовом исполняемого файла 1С. Для этого используется утилита смены кодовой страницы chcp.
Разберем по шагам, как настроить bat-файл в зависимости от кодировки:
1251. Перенаправление >nul подавляет вывод сервисного сообщения консоли.
chcp 1251 >nul
"C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\BASE\1" /N"Администратор" /P"1" /C"1"
65001. Обратите внимание, что файл должен быть сохранен без метки порядка байтов (UTF-8 without BOM).
chcp 65001 >nul
"C:\Program Files (x86)\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\BASE\1" /N"Администратор" /P"1" /C"1"
Если нет желания добавлять дополнительные команды в скрипт, можно пересохранить сам файл в кодировку, которую консоль понимает по умолчанию — OEM 866 (DOS). Рассмотрим несколько вариантов, как это сделать:
.bat-файл, внесите правки кириллицы и выберите Файл -> Сохранить как..., явно указав кодировку OEM (DOS).copy con launch.cmd, ввести нужный текст с кириллицей напрямую в терминале и нажать комбинацию Ctrl+Z для сохранения. Набранный таким образом файл сразу получит кодировку CP866.Чтобы навсегда исключить проблемы совместимости таблиц кодировок cmd.exe, рассмотрим более надежные варианты организации пакетного запуска:
WScript.Shell (методы Run или Exec) выполняется напрямую через системный API, полностью исключая прослойку в виде командной строки..v8i (стандартный формат списка баз 1С, хранящий данные в UTF-8), после чего вызывать базу указанием пути к этому файлу.Проанализируем правила оформления параметров запуска:
/N и пароля /P можно задавать как слитно (/N"Администратор"), так и через пробел (/N "Администратор"). Если имя пользователя содержит пробелы или спецсимволы, кавычки строго обязательны./WA+ (или без ключей /N и /P) из-под нужной учетной записи, избегая открытой передачи паролей.