Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

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

17.01.2013, 17:10. Показов 25120. Ответов 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\s hell\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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2013, 17:10
Ответы с готовыми решениями:

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

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

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2013, 17:10
Помогаю со студенческими работами здесь

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

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

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

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

Таблица футбольных команд: Сформировать показатели команд заданного континента
Есть вот такое задание. Рейтинговая таблица футбольных сборных содержит следующие сведения: страна, название команды, фамилии тренера...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru