С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Dragokas
Эксперт WindowsАвтор FAQ
17031 / 7089 / 857
Регистрация: 25.12.2011
Сообщений: 10,914
Записей в блоге: 16
1

Принцип составления однострочных команд Batch [Статья]

17.01.2013, 17:10. Просмотров 8350. Ответов 0
Метки нет (Все метки)

Принцип составления однострочных команд Batch

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

Область применения:
1) Языки программирования высокого уровня
2) Реестр Windows (reg-файл)

Пример логики связи:
1) Команды "удалить файлы a и b"
Bash
del a
del b
можно выполнить отдельно:
Visual Basic
shell "cmd /c del a"
shell "cmd /c del b"
2) Команды "вывести на экран сумму 1 + 1"
Bash
Set /A n= 1 + 1
Echo %n%
разрывать нельзя, так как значение переменной "n" будет утеряно.

Чтобы составить сложный набор однострочных команд для выполнения в методе (процедуре, объекте) Shell другого ЯП
нужно сначала добиться успешной отработки Вашей конструкции в среде командного интерпретатора.

Открываем консоль - Win + R (выполнить), CMD {Enter}
Формируем однострочные команды, подставляя первой командой запуск самого EXE-файла интерпретатора:
Bash
CMD.exe /C Echo Привет
Если нужно выполнить несколько команд, строку команд обрамляем кавычками (согласно синтаксиса ключей CMD /?)
а сами команды разделяются знаком "амперсанд" (&)
Bash
::если файл "а" существует, скопировать его под именем "b". Удалить файл "c".
cmd /c "if exist a copy a b& del c"
Все кавычки, которые будут заключены внутрь считаются как единая строка и не бьются на отдельные токены. Об этом беспокоится не нужно.
Bash
::Например, копирование файла с пробелами в пути и/или имени:
cmd /c "copy "c:\my folder\a.txt" "c:\my folder\b.txt""
Если участвует цикл FOR, в отличие от текста bat-файла, здесь спецсимволы не обрабатываются, поэтому % в цикле удваивать не нужно.
Если команду нужно указать вне цикла, тогда весь блок цикла помещается в скобки.
Bash
::Подсчет кол-ва файлов *.txt
cmd /c "(for %a in (*.txt) do set /A n+=1)& Echo !n!"
Если нужно выполнить несколько команд в цикле, обрамляем их скобками после ключевого слова do:
Bash
cmd /c "for %a in (*.txt) do (set /A n+=1& Echo !n!)"
В однострочной команде переменная сразу не изменяет значения. Получить его можно, влючив "отложенное расширение переменных", а переменную окружив знаками (!):
Bash
cmd /c "SetLocal EnableDelayedExpansion& Set /A n= 1 + 1& Echo !n!"
чтобы не писать такую длинную команду добавьте к CMD ключ /V:ON обязательно перед ключем /C. Все, что после него считается выполняемыми командами.
Bash
cmd /v:on /c "Set /A n= 1 + 1& Echo !n!"
.

Построение кавычек внутри переменных других ЯП

Кавычка (") - является специальным (служебным) символом для языка Visual Basic,
и если в реестре, или в языках C++, C# ... для задания кавычки (") как значение переменной нужно указать экран в виде бекслеша (\)
C#
st = "\""
в VB кавычка удваивается.

Есть 2 способа присвоения значений с кавычкой переменной:
1) Удвоение кавычки
Visual Basic
Shell = "cmd /c ""copy ""c:\my folder\a.txt"" ""c:\my folder\b.txt"""""
2) Через функцию Chr(34), которая возвращает символ под номером 34 ASCII-таблицы кодов (").
В VB результат выполнения функции и строковой тип данных может конкатенироваться знаком амперсанд (&).
Visual Basic
1
Shell = "cmd /c " & Chr(34) & "copy " & Chr(34) & "c:\my folder\a.txt" & Chr(34) & " " & Chr(34) & "c:\my folder\b.txt" & string(2, Chr(34))
Но я предпочитаю вариант № 1.

Общий принцип разбора чужих запросов с кавычками таков:

Вариант 1) Автоматически.
Поставьте Stop после команды присвоения переменной сложного запроса.
выполните ?variable {ENTER} в окне Immediate (Вид - окно неотложного (View - Immediate (Ctrl+G)))
Увидим результат


Вариант 2) Вручную.
Кавычка в CMD - это двойная кавычка здесь в переменной ""), т.е. если видите запись вида:
Visual Basic
param = """ """
Чтобы "расшифровать", отбрасываете визуально левую и правую кавычку, остальные парные кавычки меняете на одиночные и получаете то, что увидит командная строка:
Bash
" "
Также в реестре, C++, C# ... спецсимволом является сам знак бекслеш (\), который разделяет папки, путь к файлу.
Здесь приняты 2 способа:
1) Удвоение бекслеша (\\)
Цитата Сообщение от cs_compile.reg
[HKEY_CLASSES_ROOT\VisualStudio.cs.11.0\shell\compile\command]
@="\"c:\\Program Files (x86)\\hidcon.exe\" \"c:\\Program Files (x86)\\ModsCompiler.bat\" \"%1\""
2) Замена бекслеша (\) на обычный слеш (/)
Цитата Сообщение от cs_compile.reg
@="cmd /c \"\"c:/Program Files (x86)/ModsCompiler.bat\" \"%1\"\""
Альтернативой для ЯП при использовании Shell является выгрузка кода в несколько строк во внешний файл. Запуск его отдельно.
При этом такой код может быть заранее:
1) записан в переменную по указанным выше правилам. Работа с файлами (Чтение и запись).
2) подключен к проекту в виде файла Custom Resource Как вставить внешнюю программу в свой ехе'шник
3) Присоединён в конец уже скомпилированного EXE-файла в открытом виде Exe из ресурсов требует несвойственные для него параметры

Некоторые примеры: Рекурсивный подсчет кол-ва файлов, заданных маской
Еще в VB можно получить код возврата, сгенерированного командами CMD или вручную через Exit - Полезные VBS скрипты и программы по работе с ними
Часть данного материала выносится в будущий FAQ: Наиболее частые ошибки, заметки особенностей программинга BAT файлов, баги интерпретатора*
4
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 17:10
Ответы с готовыми решениями:

SetLocal и расширенная обработка команд в Windows Batch [Статья]
SetLocal и расширенная обработка команд Часто встречали такую конструкцию ?...

Можно ли организовать выполнение команд Telnet с использованием VBS и Batch?
Есть компьютер на винде 7 и есть компьютер на линуксе. Нужно проверить работает...

Принцип составления баланса мощностей
Разъясните пожалуйста, по каким основным принципам составляется уравнение...

Помогите понять принцип составления проги
Пытаюсь обучиться работать с формами в Visual Studio, перед этим имевши...

Принцип составления отчета по остаткам товара на складе в 1С
Подскажите, пожалуйста, по какому принцепу составляется отчет по остаткам...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2013, 17:10

Возник спор по поводу составления составления системы диф. уров движения материальной точки, так кто же прав ?
Сначала само задание : В ПРИЛОЖЕННОМ МНОЮ ИЗОБРАЖЕНИЕ НАХОДИТЬСЯ...

Cобытийность. Принцип использования и принцип работы событий в jQ и GCT
Добрый день. Подготавливаюсь к собеседованию по чеклисту и не могу найти ответ...

Временно отменить добавление команд в очередь команд диалогового окна
Добрый день, уважаемые программисты! Начнём по порядку... Я пишу оконное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru