• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Вопросы по написанию bat-файлов

  • Автор темы Автор темы MrSTEP
  • Дата начала Дата начала

MrSTEP

一步一步地会&#
Регистрация
9 Май 2009
Сообщения
10,939
Реакции
225
Баллы
63
Вопросы по написанию bat-файлов

Здравствуйте. Решил я изучить команды командной строки и использование их в bat-файлах. В целом, основы понял, но есть одна проблема: cmd плохо обрабатывает параметры, написанные на русском языке. Например, простейший скрипт заканчивается таким образом:

Код:
@Prompt ">" 
@Echo Hallo!
@PAUSE
@Set /P ProgNM="Type the program's name: "
@Runas /user:Администратор %ProgNM%
@Set ProgNM=0
@PAUSE
Админ.webp

Пробовал советы из интернета, не помогло.
  • в начале скрипта писать "chcp 1251"
  • Менять кодировку файла: "BAT-ники используют кодовую страницу DOS 866 (русский), а Блокнот - кодовую страницу WINDOWS 1256 (русский)..."
  • пиши в Ворде, потом - Сохранить как - Обычный текст - Сохранить - MS-DOS - OK
  • а можно и в виндовом Блокноте, только выбери шрифт Terminal
  • ввести "Set nls_lang=russian_cis.ru8pc866"
В первом способе пробовал писать разные кодировки, но становилось только хуже - даже латинский текст превращался в иероглифы. Вариант с Вордом - вообще не вариант, в файле я получил вот это:
Код:
@Prompt ">" <*ҐЁ@Echo Hallo!<*ҐЁ@PAUSE<*ҐЁ@Set /P ProgNM="Type the program's name: "<*ҐЁ@Runas /user:Ђ¤¬Ё*Ёбва*в®а %ProgNM%<*ҐЁ@Set ProgNM=0<*ҐЁ@PAUSE<*ҐЁ
Я понимаю, что кириллица больное место для консоли, но может есть какой-то выход? Иногда в батнике приходится писать на кириллице пути к файлам, но... Не находил ли кто-то решения проблемы?
 
Пишите в редакторе, который поддерживает 866 кодовую страницу (Bred3, например. Или FAR).
 
О, вот это дело! Написал в Bred3 в кодировке OEM - все получилось :) Спасибо, с этим разобрался, следующие вопросы на подходе.

Кстати, в Notepad++ тоже есть это: Кодировки - Кириллица - OEM 866. И оно тоже работает.
 
[*]в начале скрипта писать "chcp 1251"

chcp 1251
всегда писали в bat-никах для backup баз когда путь на русском)))))
и проблем вроде не возникало)))))

p.s. По правилам "безопасности" - нельзя использовать имя Администратор)))
Данную учетку вам необходимо переименовать и отключить :)) это я так...к слову)))
 
А мы на работе задаем ей пароль и отключаем при вводе в домен.
 
Вопрос номер следующий: как заставить bat-файл запуститься, выполниться и закрыться? Проблема в том, что это надо выполнить из другого батника. Пример, файл ALL.BAT:
Код:
start GTAIV.bat
start GTASA.bat
Файл GTAIV.BAT:
Код:
@echo off
@echo Copying savegames of GTA IV
@xcopy "T:\aleskey\Rockstar Games\GTA IV" "GTA IV\" /e/y
@echo Done!
После выполнения каждого сценария остается окно с приглашением командной строки. Можно ли этого как-то избежать, автоматом закрывая окна после выполнения?


Добавлено через пару минут: Дописал в конец файлов exit, и окошки закрылись. Странно, с первого раза не проканало.. Вопрос снят :)
 
chcp 1251
всегда писали в bat-никах для backup баз когда путь на русском)))))
Кстати... Попробовал написать, далее поставил команду копирования между русскоязычными папками - все заработало! Правда, на экране даже латиница превратилась в кракозябры. Зато работает :)

Кстати, насчет вопроса с вызовом другого файла: нашел альтернативный способ: вместо "start GTAIV.bat" можно написать "call GTAIV.bat" - файл вызывается в этом же окне консоли, и по окончании возвращает управление исходному файлу. Естественно, вызываемый файл не должен закрываться (не содержать exit'а).
 
Еще вопрос: а можно ли запустить из bat'а программу, и не ожидать ее завершения? Пишу таким образом:
Код:
"C:\Program Files\Download Master\dmaster.exe" -autorun
После вызова программы сценарий ожидает, пока она завершится, а мне это не надо. Есть варианты?
 
Команда start Вам поможет.
простейший синтаксис в Вашем случае:
Код:
start C:\Progra~1\Downlo~1\dmaster.exe -autorun
или
Код:
start /D "C:\Program Files\Download Master" dmaster.exe -autorun
 
Последнее редактирование:
Во, отлично, так получилось - без кавычек хороший вариант. Второй, впрочем, тоже нужно взять на заметку.

Это я сейчас пытаюсь оптимизировать время загрузки системы, и все ненужные программы из автозагрузки выключаю. А при необходимости хочу запустить некоторый набор прог из батника.
 
Назрел еще один вопрос: а можно ли как-нибудь, не особо заморачиваясь, заставить программу задуматься на пару десятков секунд? Ну сделать что-то типа sleep или delay?
 
Назад
Сверху