Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/985: Рейтинг темы: голосов - 985, средняя оценка - 4.72
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
1

Тонкости языка, редкие команды и сложные скрипты

16.10.2012, 06:56. Просмотров 183772. Ответов 96

Тема для пользователей высокого уровня подготовки.

Здесь можете размещать:
  • Ваши статьи;
  • Ссылки на другие статьи (допускаются статьи на английском языке);
  • Редкие ошибки, выдаваемые интерпретатором, способы их устранения/либо причины возникновения.
  • Недокументированные и особые трюки работы с файловой системой, устройствами и т.п.
  • Разрешено обсуждение выложенных здесь материалов (в последствии будут выделены в отдельную тему);
  • Запрещено обсуждение новичками проблем работы с CMD, где вероятная причина - банальная синтаксическая ошибка.


Статьи и тонкости языка:
Основы
  • FAQ по файлам BAT/CMD (статья) ссылка
  • Командная строка Windows (статья) ссылка
  • Особенности реализации командного процессора cmd.exe операционных систем WinNT (статья) сайт
  • Циклические операции и примеры (статья) эта тема
  • Принцип составления однострочных команд Batch (статья) эта тема
Автозапуск
  • Запуск Bat-файла как службы Эта тема
  • Выполнение командного файла перед входом в систему Эта тема
Безопасность и права
  • Элевация прав запуска BAT-файла (отображается диалог контроля учетных записей UAC) ссылка
  • Как запустить командную строку от имени администратора. эта тема
Интерфейс
  • Переключение языка вывода команд консоли на английский ссылка
КомментарийМатематика
  • Деление с выводом дробной части на батниках ссылка
  • Деление через строковую математику (для делимого, превышающего тип данных signed long int) ссылка
  • Получение 16-ричного представления числа эта тема
  • Получение кода символа по таблице ASCII из числового значения byte эта тема
  • Перевод чисел из десятеричной системы в любую (2-16) эта тема
  • Логические операции сравнения для чисел, превышающих арифметику CMD эта тема
Операционная система, реестр
  • Почему нежелательно запускать BAT из 32-битной среды в 64-разрядной системе. ссылка
  • Функции чтения/записи ключа реестра с отображением уровня ошибки ссылка
Переменные и аргументы
  • Подстановка значения переменной в имя или параметр другой переменной эта тема
  • Перебросить значение через локаль эта тема
  • Часто задаваемые вопросы по использованию аргументов командной строки (статья) сайт
  • Получение рабочего каталога на определенном диске эта тема
  • Undocumented Dynamic variables (недокументированные способы раскрытия переменных среды) эта тема
ПотокиПроцессы
  • Получение PID, имени, пути и параметров запуска процесса эта тема
Связь с другими языками программирования и средами, комбинированные батники

  • -- JScript
  • Скомбинированный файл CMD + JS (WSH) эта тема
  • Выполнение JS кода через mshta.exe эта тема
    -- VBScript
  • Передача значения из BAT-сценария в VBS-скрипт эта тема
  • Метод возврата значения из VBS-скрипта в BAT-сценарий эта тема
  • Получение ErrorLevel из команды CMD в переменную VBS-скрипта тема
    -- Реестровый ключ
  • Способ хранения ключа реестра внутри бат-файла эта тема
    -- Ресурсы внутри BAT-файла
  • Распаковка текстовой информации, заданной меткой в файле CMD, во внешний файл тема
  • Встраивание ресурсов в БАТ-файл тема
    -- Другое:
  • Комбинированный файл CMD + KIXTART
  • Объектно-ориентированное программирование на bat ссылка
Текстовые операции и работа с "массивами"
  • Вывод текста без переноса на новую строку (статья) эта тема
  • Чтение текста из файла без пропуска пустых строк эта тема
  • Экранировать восклицательный знак эта тема
  • Получить последний токен в заданной строке эта тема
  • Урезать в строке справа лишние пробелы или другие подряд идущие символы эта тема
  • Получение символов BackSpace (0x08) и Esc (0x27) в переменную эта тема
  • Функция для работы с массивами эта тема
  • Считывание файла в псевдомассив с учетом пустых строк эта тема
  • Функция правильного выравнивания текста по знакам табуляции эта тема
  • Способ передачи в бат-файл параметра содержащего символы & и последующей обработки полученного значения эта тема
Циклы
  • Подстановка переменной в роле модификатора для цикла эта тема
  • Разбиение строки на токены, если разделитель - кавычка эта тема
Файловые операции
  • Объединить 2 файла (сохранив результаты в одном из них) эта тема
  • Получение информации о размере папки эта тема

References, Special Manuals, Книги для High Level Users:
  • Command-line Reference (Microsoft Tech-Net)
  • Недокументированные и малоизвестные возможности Windows XP (книга)
  • Описание встроенных консольных утилит и команд для различных версий ОС dx21.com CMD-Reference

Баги интерпретатора CMD и встроенных команд
Планируется разместить:
Rem не всегда является командой начала комментария
Создание и удаление точек повторной обработки сайт
.

Если у Вас возникли вопросы, создайте новую тему.
16
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2012, 06:56
Ответы с готовыми решениями:

Тонкости языка С,define
Здравствуйте. Разбираюсь с одной либой для hd44780, есть вопрос по поводу использования define'ов....

Поддерживает ли встроенный сервер PHP скрипты языка Perl?
В PHP существует встроенный сервер. Создаю файл index.html с формой и файл test.pl для ее...

Логические команды языка Ассемблер
Всем привет. Тема: Изучение группы логических команд. Задание: Дано состояние 24 двоичных...

По символьному описанию команды языка Ассемблер написать ее машинный код в шестнадцатеричном формате
По символьному описанию команды языка Ассемблер написать ее машинный код в шестнадцатеричном...

96
Покинул форум
2434 / 1023 / 283
Регистрация: 07.05.2015
Сообщений: 2,021
02.05.2016, 11:23 81
Дополнение к посту о вариантах самоудаления
Было написано когда-то в стол - казалось что ценности не представляет, а если учесть, что очень похоже на вариант второй, предложенный ComSpec, то можно просто расценивать пример как "до кучи".
Windows Batch file
1
@echo off&2>nul goto&rundll32 advpack.dll,DelNodeRunDLL32 "%~f0"
2
3433 / 1971 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
03.05.2016, 09:06 82
Три варианта самоудаления пакетного файла вместе с папкой, в которой он находится, без вывода сообщения об ошибке:

1)
Windows Batch file
cd/d "%~dp0.."& start/b cmd /c rd/q/s "%~dp0"
;

2)
Windows Batch file
cd/d "%~dp0.."&  2>nul goto& rd/q/s "%~dp0"
;

3)
Windows Batch file
cd/d "%~dp0.."& "%~f0">"%~f0"& rd/q/s "%~dp0"
.

Команду CD /D можно заменять на команду PUSHD.

Будьте осторожны при использовании!
5
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
07.06.2016, 15:45  [ТС] 83
Поиск и присвоение значения переменной в потоке

Вывод результатов поиска в одну строку
0
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
21.07.2016, 19:58  [ТС] 84
В дополнение к самоудалению...

Самоудаление программы, написанной на ЯВУ (C++, VB, любая) средствами командной строки cmd.

VB6:
Visual Basic
1
2
Dim f$: f = """" & App.Path & "" & App.EXEName & ".exe"""
Shell "cmd /v/c (set f=" & f & "&for /l %l in () do if exist !f! (del /f/a !f!) else (exit))", 0
C++
C++
1
2
3
4
5
6
7
8
9
#include <stdlib.h>
#include <sstream>
 
int main(int argc, char *argv[])
{
    std::stringstream SS;
    SS << "start cmd /v/c \"set f=" << argv[0] << "&for /l %l in () do if exist !f! (del /f/a \"!f!\") else (exit)\"";
    system(SS.str().c_str());
}
0
0 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 15
06.08.2016, 00:55 85
Хочу представить вашему вниманию язык программирования на batch
Кликните здесь для просмотра всего текста
WAT?

В общем для установки надо запустить installer.bat от администратора
Пример программы:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
echo Sums of compile.bat:
md5("compile.bat",file)
echo Md5: %result%
crc32("compile.bat")
echo crc32: %result%
base64("compile.bat",file)
echo Base64: %result%
pause
exit /b
Всё остальное в папке docs
0
Вложения
Тип файла: zip EAZZYBATCH.zip (2.26 Мб, 40 просмотров)
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
20.08.2016, 00:47  [ТС] 86
Присвоение значения переменной, полученного через канал и другие фичи.
0
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 6
28.02.2017, 10:29 87
По поводу этой команды: copy /b FILE.EXT+,,
Можете объяснить, зачем в конце две запятые?
0
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
02.03.2017, 17:46  [ТС] 88
На сколько я понимаю, это вместо разделителей аргументов, чтобы команда не воспринимала их отсутствие как ошибку в синтаксисе.
В windows 7 вообщем то можно и без них:
Windows Batch file
1
copy /b FILE.EXT+
на других не тестировал.

А сама команда - подобно *nix-овой touch, меняет дату модификации файла на текущую.
1
2781 / 1252 / 215
Регистрация: 10.12.2013
Сообщений: 4,228
02.03.2017, 22:15 89
то есть,
Windows Batch file
1
copy/b *+
поменяет modified date & accessed date на текущую у всех файлов в каталоге...
неплохо.
2
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
02.03.2017, 22:20  [ТС] 90
Можно просто:

Windows Batch file
1
copy *+
1
zb
7 / 7 / 0
Регистрация: 08.05.2017
Сообщений: 55
10.05.2017, 16:35 91
подавление вывода команд
почему-то принято при использовании chcp перенаправлять в nul, что оборачивается генерацией соответствующего ф-ла. решения:
тунель в никуда
Windows Batch file
1
chcp 1251 | break
тунель в комментарий
Windows Batch file
1
chcp 1251 | rem
0
Эксперт WindowsАвтор FAQ
17487 / 7337 / 874
Регистрация: 25.12.2011
Сообщений: 11,113
Записей в блоге: 16
10.05.2017, 16:40  [ТС] 92
nul <> null
1
Заблокирован
19.11.2017, 19:34 93
Advanced usage - CALL SET
The CALL SET syntax allows a variable substring to be evaluated, read the CALL page for more detail on this technique:

Windows Batch file
1
2
3
4
5
SET start=10
SET length=9
SET string=The quick brown fox jumps over the lazy dog
CALL SET substring=%%string:~%start%,%length%%%
ECHO (%substring%)
0
602 / 234 / 98
Регистрация: 17.03.2014
Сообщений: 612
10.04.2018, 00:24 94
забавное использование certutil:
Windows Batch file
1
certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" %temp%\pstools.zip
загрузит в папку %temp% файл https://download.sysinternals.com/files/PSTools.zip

источник

таким образом, на ОС, старше Win7, для загрузки файлов из интернета в командной строке - CURL устанавливать не нужно
3
Любознательный
1257 / 683 / 207
Регистрация: 10.03.2016
Сообщений: 1,627
10.04.2018, 09:35 95
Цитата Сообщение от b0gus Посмотреть сообщение
таким образом, на ОС, старше Win7, для загрузки файлов из интернета в командной строке - CURL устанавливать не нужно
Вопрос только в том, насколько старше? Ибо, например, в XP этой утилиты нет.
0
2 / 2 / 0
Регистрация: 05.09.2017
Сообщений: 4
15.05.2019, 00:36 96
Недокументированные возможности REGINI
(Windows 7)

Помимо стандартных разрешений указзаных в справке:
Кликните здесь для просмотра всего текста
1 - Администратор, полный доступ

2 - Администратор, чтение

3 - Администратор, чтение и запись

4 - Администратор, чтение, запись и удаление

5 - Создатель, полный доступ

6 - Создатель, чтение и запись

7 - Все, полный доступ

8 - Все, чтение

9 - Все, чтение и запись

10- Все, чтение, запись и удаление

11- Опытные пользователи, полный доступ

12- Опытные пользователи, чтение и запись

13- Опытные пользователи, чтение, запись и удаление

14- Системный оператор, полный доступ

15- Системный оператор, чтение и запись

16- Системный оператор, чтение, запись и удаление

17- Система, полный доступ

18- Система, чтение и запись

19- Система, чтение

20- Администратор, чтение, особые разрешения

21- Интерактивные пользователи, чтение, полный доступ

22- Интерактивные пользователи, чтение

23- Интерактивные пользователи, чтение, особые разрешения

0 - Нет групп или пользователей, имеющих разрешение на доступ к данному объекту, но владелец объекта может назначить разрешения.

можно дополнительно задавать несколько незадокументированных:
Кликните здесь для просмотра всего текста

24 - ИНТЕРАКТИВНЫЕ, Запрос значения, Задание значения, Создание подраздела, Перечисление подразделов, Уведомление, Удаление, Чтение разрешений

25 - Пользователи, Запрос значения, Задание значения, Создание подраздела, Перечисление подразделов, Уведомление, Чтение разрешений

26 - ПОЛЬЗОВАТЕЛЬ СЕРВЕРА ТЕРМИНАЛОВ, Полный доступ

27 - ПОЛЬЗОВАТЕЛЬ СЕРВЕРА ТЕРМИНАЛОВ, Запрос значения, Перечисление подразделов, Уведомление, Чтение разрешений

28 - ПОЛЬЗОВАТЕЛЬ СЕРВЕРА ТЕРМИНАЛОВ, Запрос значения, Задание значения, Создание подраздела, Перечисление подразделов, Уведомление, Чтение разрешений

29 - ПОЛЬЗОВАТЕЛЬ СЕРВЕРА ТЕРМИНАЛОВ, Запрос значения, Задание значения, Создание подраздела, Перечисление подразделов, Уведомление, Удаление, Чтение разрешений

30 - Пользователи, Запрос значения, Перечисление подразделов, Уведомление, Чтение разрешений

31 - Опытные пользователи, Запрос значения, Перечисление подразделов, Уведомление, Чтение разрешений

39 - Наследовать разрешения
1
4 / 4 / 0
Регистрация: 16.10.2014
Сообщений: 113
28.08.2019, 10:14 97
Тему с FaQ'ом по PsExec не нашёл, напишу здесь результаты своих исследований.
Логирование в PsExec на примере задачи записать значение переменной удалённого ПК на локальный или на тот же удалённый ПК.
Так как значение переменной нужно удалённого ПК, поэтому заключаем его двойными знаками процента: %%ALLUSERSPROFILE%%. Если с одинарными - будет взято значение переменной локального ПК.

Когда кавычки обрамляют саму команду до перенаправления (до знака >), то путь лога воспринимается относительно локального ПК, поэтому переменные в пути лога надо писать с одинарными процентами:
Windows Batch file
1
PsExec \\%ip% cmd /c "echo.%%ALLUSERSPROFILE%%">"%ALLUSERSPROFILE%\Test.log"
Если кавычки не обрамляют ни команду отдельно, ни вместе с логом, то лог пишется также относительно локального ПК
Windows Batch file
1
PsExec.exe \\%ip% cmd /c echo.%%PROCESSOR_ARCHITECTURE%%>"%ALLUSERSPROFILE%\Test.log"
Когда кавычки обрамляют вместе команду и путь к логу, то лог пишется на удалённый ПК, поэтому переменные в пути лога надо с двойными процентами:
Windows Batch file
1
PsExec \\%ip% cmd /c "echo.%%ALLUSERSPROFILE%%>"%%ALLUSERSPROFILE%%\Test.log""
Путь к логу в этих трёх вариантах заключать в кавычки, если могут содержать пробелы.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 10:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать программу, которая содержит в себе команды обработки строк языка ассемблер
Создать програму которая содержит в себе команды обработки строк языка асемблер. Выполнить введение...

Вам представлен машинный код нескольких команд. Получите соответствующие им команды языка Ассемблера
Вам представлен машинный код нескольких команд. Получите соответствующие им команды языка...

Не могу найти коды языка html которые бы выполняли команды, .выбор категории фото
мне уже известны коды html .которые делают на сайте,выбор фото и загрузить. но этого мало, нужно...

Как скрипты видят другие скрипты, которые были объявлены ранее?
Может кто-нибудь объяснить как реализовано то, что у нас скрипт, который был заинклуден в html...

Редкие программы
тема и тупая, но в институте задали такой вопрос: какие программы считаются редкими,привести их...

Lotusscript: редкие конструкции
Здравствуйте, коллеги. Накидайте мне здесь, пожалуйста, хитрых, редких, необычных и разных...


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

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

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