Технический форум

Технический форум (http://www.tehnari.ru/)
-   Операционная система Windows (http://www.tehnari.ru/f37/)
-   -   Вопросы по написанию bat-файлов (http://www.tehnari.ru/f37/t77099/)

MrSTEP 11.08.2012 22:46

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

Код:

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

Вложение 92044

Пробовал советы из интернета, не помогло.
  • в начале скрипта писать "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<*ҐЁ
Я понимаю, что кириллица больное место для консоли, но может есть какой-то выход? Иногда в батнике приходится писать на кириллице пути к файлам, но... Не находил ли кто-то решения проблемы?

Ultras 11.08.2012 23:17

Пишите в редакторе, который поддерживает 866 кодовую страницу (Bred3, например. Или FAR).

MrSTEP 12.08.2012 13:15

О, вот это дело! Написал в Bred3 в кодировке OEM - все получилось :) Спасибо, с этим разобрался, следующие вопросы на подходе.

Кстати, в Notepad++ тоже есть это: Кодировки - Кириллица - OEM 866. И оно тоже работает.

Hirurg 12.08.2012 20:10

Цитата:

Сообщение от MrSTEP (Сообщение 778494)
[*]в начале скрипта писать "chcp 1251"

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

p.s. По правилам "безопасности" - нельзя использовать имя Администратор)))
Данную учетку вам необходимо переименовать и отключить :)) это я так...к слову)))

MrSTEP 12.08.2012 21:10

А мы на работе задаем ей пароль и отключаем при вводе в домен.

MrSTEP 12.08.2012 22:11

Вопрос номер следующий: как заставить 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, и окошки закрылись. Странно, с первого раза не проканало.. Вопрос снят :)

MrSTEP 13.08.2012 20:50

Цитата:

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

Кстати... Попробовал написать, далее поставил команду копирования между русскоязычными папками - все заработало! Правда, на экране даже латиница превратилась в кракозябры. Зато работает :)

Кстати, насчет вопроса с вызовом другого файла: нашел альтернативный способ: вместо "start GTAIV.bat" можно написать "call GTAIV.bat" - файл вызывается в этом же окне консоли, и по окончании возвращает управление исходному файлу. Естественно, вызываемый файл не должен закрываться (не содержать exit'а).

MrSTEP 24.08.2012 23:44

Еще вопрос: а можно ли запустить из bat'а программу, и не ожидать ее завершения? Пишу таким образом:
Код:

"C:\Program Files\Download Master\dmaster.exe" -autorun
После вызова программы сценарий ожидает, пока она завершится, а мне это не надо. Есть варианты?

Ultras 25.08.2012 00:46

Команда start Вам поможет.
простейший синтаксис в Вашем случае:
Код:

start C:\Progra~1\Downlo~1\dmaster.exe -autorun
или
Код:

start /D "C:\Program Files\Download Master" dmaster.exe -autorun

MrSTEP 25.08.2012 13:48

Во, отлично, так получилось - без кавычек хороший вариант. Второй, впрочем, тоже нужно взять на заметку.

Это я сейчас пытаюсь оптимизировать время загрузки системы, и все ненужные программы из автозагрузки выключаю. А при необходимости хочу запустить некоторый набор прог из батника.


Часовой пояс GMT +4, время: 07:24.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.