Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Модерирует : gyra, Maz

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

cchameleone



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
(часть 1) (часть 2) (часть 3) (часть 4)
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
» Описание Cmd.exe » Command shell overview
» Using batch files » Using batch parameters » Using filters » Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Попов А. Командная строка и сценарии Windows (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна, Выполнение BAT-скриптов без вызова окна консоли
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)

Всего записей: 2271 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
да и еще окно заползает под панель задач

Этого быть не должно - если число LINES больше высоты экрана, увеличивается только размер буфера. См. http://stackoverflow.com/questions/4692673/how-to-change-screen-buffer-size-in-windows-command-prompt-from-batch-script

----------
Magically yours
Raistlin

Всего записей: 3030 | Зарегистр. 18-04-2005 | Отправлено: 17:17 12-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin

Цитата:
Этого быть не должно - если число LINES больше высоты экрана, увеличивается только размер буфера.

Если количество строк больше экрана, появляется буфер в окне, это да. Но консольное окно, после запуска батника, всегда имеет разное положение, в моем случае (количество строк больше экрана), окно всегда запускается с отступом от левого и верхнего края, нижняя часть окна заползает под панель задач и эта часть равна размеру отступа от верхнего края экрана, то есть окно каждый раз надо подымать выше, чтобы оно вписалась по высоте (от верхней точки экрана и до панели задач). Такое поведение на ХР, как там на других ОС, не знаю, не проверял. Как не крути, но я не хочу размер высоты окна на всю высоту экрана.
 
Нашел полурешние: вывод выхлопа в MORE -

Код:
MODE CON COLS=90 LINES=38
command | MORE

 
Можно ли всю метку перенаправить в MORE? Типа:

Код:
CALL :Choice | MORE


----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 18:19 12-06-2016 | Исправлено: boss911, 18:20 12-06-2016
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ, премного благодарен

Всего записей: 1725 | Зарегистр. 19-09-2011 | Отправлено: 19:20 12-06-2016
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
Можно ли всю метку перенаправить в MORE?


Код:
 
@echo off
if _%Redir% == _ (
  set Redir=1
  cmd /c call %0 | more
  exit /b
)
dir %SystemRoot% /s
 


----------
Magically yours
Raistlin

Всего записей: 3030 | Зарегистр. 18-04-2005 | Отправлено: 19:24 12-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
Но консольное окно, после запуска батника, всегда имеет разное положение, в моем случае (количество строк больше экрана), окно всегда запускается с отступом от левого и верхнего края, нижняя часть окна заползает под панель задач и эта часть равна размеру отступа от верхнего края экрана, то есть окно каждый раз надо подымать выше, чтобы оно вписалась по высоте (от верхней точки экрана и до панели задач). Такое поведение на ХР, как там на других ОС, не знаю, не проверял. Как не крути, но я не хочу размер высоты окна на всю высоту экрана.  

Запускается оно с отступом и в разных положениях потому, что включен автоматический выбор положения окна.
Вызываем консольное окно, выставляем положение по верхнему краю как требуется, далее клик в левом вернем углу на окне: Свойства->Расположение -> здесь настраиваем по своему вкусу размеры и буфер, отключаем автоматический выбор положения окна и кликаем "OK". Получаем модальное окно с вопросом на применение свойств к текущему окну, либо ко всем окнам, выбираем "для других окон с тем же именем". Далее уже запускаем сценарии с измененными параметрами колонок и строк, окно будет оставаться там, где ему предписано...

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 09:05 13-06-2016 | Исправлено: YuS_two, 09:19 13-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two

Цитата:
клик в левом вернем углу на окне: Свойства

Мне нужно настроить окно только для текущего батника и чтобы эти настройки окна работали на всех компах, то, что вы предлагаете, это только для текущей машины и для всех либо конкретного окна. Можно, конечно, править глобальные настройки окна CMD в реестре, потом возвращать их из бекапа, но такой костыль мне не по душе.
 


GCRaistlin
 
Примерная конструкция моего батника.
Мне нужно, чтобы все, что в :Choice было выведено в MORE. Сейчас работает, но глобально для всего батника и как-то мутно, после запуска батника первое нажатие на пробел/энтер ни к чему не приводит, только после второго нажатия листается MORE.
 
Можно ли как-то задать определенное количество вывода строк (я про dir %SystemRoot% /s)? То есть, если LINES=38, то пусть выводит не на все 38, а на 35.

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 13:09 13-06-2016 | Исправлено: boss911, 13:50 13-06-2016
hErAux



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Мне нужно настроить окно только для текущего батника и чтобы эти настройки окна работали на всех компах
boss911
Совет от создателей "Unknown Artist - Track 1.mp3" и "Новая папка (2)":
Задайте заголовок у окна своего батника и установите настройки только для него.
 
Подробнее...

Всего записей: 210 | Зарегистр. 08-04-2016 | Отправлено: 13:39 13-06-2016 | Исправлено: hErAux, 13:44 13-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hErAux

Цитата:
Задайте заголовок у окна свое батника и установите настройки только для него.

И как настройки "только для него" будет работать на других машинах?

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 13:48 13-06-2016
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911
Вам нужно вместо вызова подпрограммы запускать вторую копию батника из самого себя. И каким-то образом давать этой второй копии понять, что нужно сразу перейти в подпрограмму. Это можно делать параметром или установкой переменной. Мой простейший пример - это демонстрация общего принципа.

----------
Magically yours
Raistlin

Всего записей: 3030 | Зарегистр. 18-04-2005 | Отправлено: 14:05 13-06-2016
metatrop

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin

Цитата:
 
Задачка интересная, конечно
 

 
Интересная, но ничего общего с назначением cmd не имеющая. На самом деле, cmd - достаточно удачный именно для своего назначения язык, несмотря на полнейшую "неформатность" и разные затруднения в "программировании" (которые, как правило, имеют решение - в частности проблема символов ! ^ % & | в именах обрабатываемых файлов на практике всегда решается). Очень важны, например, быстрая загрузка новой копии, минимальный расход памяти на одну копию.
 
Даже перед bash у cmd есть ряд преимуществ: возможность менять файл скрипта во время исполнения (организация вручную пополняемых очередей исполнения, вроде разных загрузок или кодирования видео), очень компактная форма доступа к частям имени файла (%~nx1 и т.п.), goto с метками-переменными многое позволяет записывать гораздо короче и т.п.
 
boss911  

Цитата:
 
Но консольное окно, после запуска батника, всегда имеет разное положение
 

 
Можно менять положение и размер окна в процессе работы, только нужна небольшая утилитка
 
cmdow.exe @ /MOV 20 20 /SIZ 1000 1000

Всего записей: 260 | Зарегистр. 17-09-2010 | Отправлено: 15:10 13-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
Мне нужно настроить окно только для текущего батника и чтобы эти настройки окна работали на всех компах

Тогда путь один: его подсказал уже metatrop. Распространять придется вместе со сценарием...
Утилиту лучше искать у автора
 

Цитата:
Интересная, но ничего общего с назначением cmd не имеющая.

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

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 15:49 13-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Определенная команда выводит информацию (выхлоп), например, в 200 строк (с учетом пустых). Как сделать, чтобы вывод выхлопа разбивался на 30 строк, а между ними PAUSE (30 -> пауза -> следующие 30 и т.д.). На крайний случай, вывод остальных/последних (170) строк пусть перенаправляется в MORE. Вывод должен происходить без обрезки пустых строк и хотелось бы без создания временных файлов. Ничего из этого у меня не получается.

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 17:01 13-06-2016
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911
Чем перенаправление в MORE не устраивает?
 

Цитата:
Ничего из этого у меня не получается.

А вы показывайте свой вариант. Естественно, выбрасывая все не относящееся к делу и заменяя специфические команды на обычные (ту же "dir c:\ /s" для эмуляции длинного вывода).

----------
Magically yours
Raistlin

Всего записей: 3030 | Зарегистр. 18-04-2005 | Отправлено: 17:24 13-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin

Цитата:
Чем перенаправление в MORE не устраивает?

Если так:

Код:
MODE CON COLS=90 LINES=38
ECHO Message...
dir /s %ProgrammFiles% | MORE

то убивает "Message...", ибо заполняет все 38 строк, не подходит. А вот если бы сначала можно было бы вывести 30 строк, было бы то, что надо. Указать MORE 'P 30' ни как нельзя (гг)?
 

Цитата:
А вы показывайте свой вариант.

Указывал уже и сам пост.
 
Свой бы (кастомный) MORE был бы лучше, как по мне, где можно было бы управлять количеством выводов строк.

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 17:45 13-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
А вот если бы сначала можно было бы вывести 30 строк, было бы то, что надо.


Цитата:
Свой бы (кастомный) MORE был бы лучше, как по мне, где можно было бы управлять количеством выводов строк.


Код:
@echo off
echo Message.....
set cnt=0
for /f "delims=" %%i in ('dir /b/s c:\TEST') do call :mo "%%i"
pause&&exit
:mo
set /a cnt+=1
echo "%~1"
if %cnt% gtr 30 (set cnt=0&&pause)
exit /b

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 18:42 13-06-2016 | Исправлено: YuS_two, 19:12 13-06-2016
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
убивает "Message...", ибо заполняет все 38 строк

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

Цитата:
Указывал уже

Нет, это не годится. Во-первых, примеры должны быть рабочими. Что такое "Commands"? Во-вторых, вы спросили совета, вам его дали - так перепишите свои скрипты в соответствии с советом. А я не вижу в этих примерах реализации моего последнего совета.

----------
Magically yours
Raistlin

Всего записей: 3030 | Зарегистр. 18-04-2005 | Отправлено: 18:46 13-06-2016 | Исправлено: GCRaistlin, 18:47 13-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two
 
Спасибо, то, что нужно, но есть нюанс и пожелание. Без использования метки можно? Выхлоп 'dir /s c:\test' внутри скобок FOR выходит без учета пустых строк, можно сделать, чтобы пустые строки отображались, чтобы форматирование выхлопа было точно такое же, как будто мы набрали и выполнили эту команду в CMD? В хелпе для FOR /F говорится, что пустые строки пропускаются, чего мне совсем не нужно.

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 00:33 14-06-2016 | Исправлено: boss911, 00:37 14-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

Цитата:
В хелпе для FOR /F говорится, что пустые строки пропускаются, чего мне совсем не нужно.

Ну, с форматированием в cmd бяда, выбор невелик... но тут либо ехать, либо выбирать что-то более подходящее... например, powershell...
А чем не подходит вариант с паузой после мессэджа, но перед выводом с морем? Вполне читабельно же.

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 06:46 14-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two

Цитата:
А чем не подходит вариант с паузой после мессэджа, но перед выводом с морем?

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

----------
Мама не горюй

Всего записей: 3573 | Зарегистр. 29-01-2005 | Отправлено: 08:12 14-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
boss911

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

Ну так я и спрашиваю:

Код:
@echo off&&echo.&&echo Message Attention!!!&&echo.&&echo.&&pause&&dir /s %systemroot%|more

- в чем проблема? Читаем сообщение, жмем аникей, любуемся на море...
Всё равно, мессэдж убежит не с первым, так со вторым морем - стоит ли овчинка выделки?
 
Ну, ок, говорю же, для шашечек, надо поискать что-то другое. Например так:

Код:
@echo off
cmdow.exe @ /MOV -4 -4 /SIZ 1000 600
<nul set /p  = Message Attention!!!
powershell /nologo "&{dir -recurse %systemroot%|oh -paging}"

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 10:20 14-06-2016 | Исправлено: YuS_two, 10:22 14-06-2016
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru