Тема: CMD/BAT: Макросы DOSKEY — полезная вещь, которую не многие используют
Многие пользуются в повседневной работе командным интерпретатором Windows (cmd.exe), т.к. бывают задачи которые намного продуктивней делать в консоли, а есть и такие задачи которые по-другому и не выполнишь.
Но иногда надоедает вводить одни и те же команды при выполнении однотипных действий. Кто-то для автоматизации своей рутины использует командные файлы (cmd, bat), кто-то пишет скрипты на более высоком уровне (vbs, js, etc). Но иногда бывает, что просто не целесообразно "городить огород" из скриптов и им подобных. Так как для каждого конкретного случая нужно будет писать свой конкретный сценарий, как следствие, когда этих сценариев будет много, засорение файловой системы, да и просто может возникнуть путаница.
Приведу пример.
При щелчке ПКМ на значке сетевого подключения в появившемся меню есть опция «Исправить». Функционал этой опции можно воспроизвести посредством нескольких команд:
Ipconfig /release
Ipconfig /flushdns
Ipconfig /renew
Ipconfig /registerdns
Но вводить каждый раз эти команды вручную не особенно хочется. Видится такой явный выход из данной ситуации: поместить данные командный сценарий, что-нибудь типа ipdebug.cmd, и в последствии запускать уже его.
Еще пример:
есть в windows такая хорошая команда shutdown, при помощи нее можно производить различные действия, связанные с выключением компьютера (shutdown –r – перезагрузка через 30 сек, shutdown –l – завершение сеанса пользователя). Можно конечно вводить все параметры командной строки вручную, можно для каждого случая так же сделать командный файл и запускать его, но всё это не очень удобно, т.к. либо нужно помнить параметры запуска, либо засорять ФС лишними файлами.
Но выход есть. И довольно «элегантный». Это макросы DOSKEY!
Из встроенной справки Windows:
«Doskey - Вызов программы Doskey.exe, которая позволяет повторно вызывать команды Windows XP, редактировать командные строки и создавать макросы».
Задается какой-либо макрос так:
Doskey имя_макроса=текст_макроса
Текст_макроса – это список команд вызываемых макросом.
Например:
Doskey reboot= shutdown –r –t 10 –c "Компьютер будет перезагружен"
Если мы выполним эту команду, то создастся макрос reboot, при запуске которого появится окно с сообщением “Компьютер будет перезагружен” и через 10 сек. компьютер перезагрузится.
Так же можно использовать макросы doskey в большинстве консольных приложений.
Например:
Nslookup, чтобы посмотреть все A-записи домена DOMAIN нужно ввести команду ls –t A DOMAIN. А можно сделать макрос doskey.
Doskey /exename=nslookup.exe list=ls –t A DOMAIN.
Теперь в nslookup достаточно ввести list и мы получим список А-записей в домене DOMAIN.
Неправда ли удобно?
Однако все введенные вручную макросы действительны только в течение активной сессии. Чтобы каждый раз не вводить макросы заново можно их хранить в текстовом файле. И подгружать их оттуда командой doskey /macrofile=имя_файла. Где имя_файла – текстовый файл с макросами doskey.
Чтобы выгрузить все введенные вручную макросы в файл можно воспользоваться командой
doskey /macros:all > файл_для_макросов
Вообще синтаксис файла макросов следующий:
[имя_исполняемого_файла1.с_расширением]
Макрос1=список_команд
Макрос2=список_команд
...
МакросN=список_команд
[имя_исполняемого_файлаN.с_расширением]
Макрос1=список_команд
Макрос2=список_команд
...
МакросN=список_команд
Например:
[nslookup.exe]
list=ls -t A DOMAIN
[cmd.exe]
man=if /i "$1" neq "" hh ntcmds.chm::/$1.htm
ipdebug=ipconfig /release&ipconfig /flushdns&ipconfig /renew&ipconfig /registerdns
reboot=shutdown -r -t 0$1 –c "Компьютер будет перезагружен"
logoff=shutdown -l
poweroff=shutdown -s -t 0$1 –c "Компьютер будет выключен"
lock=%SystemRoot%\system32\rundll32.exe USER32.DLL,LockWorkStation
ls=dir $*
Чтобы не подгружать файл макросов вручную удобно поместить его вызов в автозапуск командного процессора в реестре.
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor]
"AutoRun"="doskey /Macrofile=с:\\windows\\doskey.macro"
Подробно о данной программе можно прочитать во встроенной справке windows:
hh ntcmds.chm::/doskey.htm