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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Открыть новую тему     Написать ответ в эту тему

cchameleone



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 12
 
Полезные ссылки
· Из 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. Справочник администратора
 
· Скрываем консольные окна
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.zip - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
 
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)

Всего записей: 2089 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: TheBarmaley TMP, 12:35 29-04-2016
GCRaistlin



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

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

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

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

Всего записей: 1804 | Зарегистр. 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


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

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



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

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



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

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


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


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

Всего записей: 1804 | Зарегистр. 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.

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

Всего записей: 3174 | Зарегистр. 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

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

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

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

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



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

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

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

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

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

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

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

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

Всего записей: 111 | Зарегистр. 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. Вывод должен происходить без обрезки пустых строк и хотелось бы без создания временных файлов. Ничего из этого у меня не получается.

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

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



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

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

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

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

Всего записей: 1804 | Зарегистр. 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 был бы лучше, как по мне, где можно было бы управлять количеством выводов строк.

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

Всего записей: 3174 | Зарегистр. 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



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

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

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

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

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

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

Всего записей: 1804 | Зарегистр. 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 говорится, что пустые строки пропускаются, чего мне совсем не нужно.

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

Всего записей: 3174 | Зарегистр. 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, но оно как-то странно у меня работает.

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

Всего записей: 3174 | Зарегистр. 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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru