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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
boss911



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

Цитата:
Читаем сообщение, жмем аникей, любуемся на море...

Нужно вывести сообщение и выхлоп, то и другое должно быть на экране одновременно, а не одно за другим через паузу. PowerShell не для ХР. Короче, ситуация ясна, как хотелось не получается.

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

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



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

Цитата:
то и другое должно быть на экране одновременно

Это в смысле "хочу и всё тут"? Лично я не представляю по какой технической причине может возникнуть такое требование.  
Говорю же, если хочется шашечек, то cmd - плохой помощник в этом.

Цитата:
PowerShell не для ХР.

Ошибочное мнение = глубокое заблуждение.  
Здесь подтверждение моего утверждения
Но это уже не в рамках этого топика надо обсуждать.

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь, плиз, если что сильно не обижайте.

Код:
@Echo off
 
CALL :ChoiceMenu
 
CLS & ECHO %Index%
ECHO. & PAUSE & EXIT
 
:ChoiceMenu
 CLS & ECHO.
 ECHO Message...
 SET /P CHOICE="Enter index number or "*" => "
 FOR /L %%I IN (1,1,99) DO IF "%%I"=="%CHOICE%" (SET Index=%CHOICE%) ELSE (GOTO:ChoiceMenu)
GOTO:EOF

Ввожу "1", жму энтер, снова открывается :ChoiceMenu, разве не SET должен сработать? Но не срабатывает, почему?
Ничего не ввожу или ввожу "11", жму энтер, снова запускается :ChoiceMenu, все логично, так мне и нужно.
 
Задача. Нужно проверить значение %CHOICE%, оно должно иметь строго числовое значение (без пробелов) в диапазоне 1-99 ИЛИ символ "*" (без пробелов). Если это число из диапазона 1-99 ИЛИ символ "*", тогда 'SET Index=%CHOICE%'. Если проверка не прошла, тогда "GOTO:ChoiceMenu".

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

Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 15:02 14-06-2016 | Исправлено: boss911, 15:09 14-06-2016
YuS_two



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

Код:
@echo off
CALL :ChoiceMenu
 
CLS & ECHO %Index%
ECHO. & PAUSE & EXIT
 
:ChoiceMenu
 CLS & ECHO.
 ECHO Message...
 SET /P CHOICE="Enter index number or "*" => "
 FOR /L %%I IN (1,1,99) DO IF "%%I"=="%CHOICE%" (SET Index=%CHOICE%&&exit /b)
 if "*"=="%CHOICE%" SET Index=%CHOICE%&&exit /b
 GOTO :ChoiceMenu

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two
 
Вот как оно оказывается. Спасибо.
 
Подробнее...

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

Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 18:01 14-06-2016
MisHel64



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

Цитата:
Нужно вывести сообщение и выхлоп, то и другое должно быть на экране одновременно, а не одно за другим через паузу. Короче, ситуация ясна, как хотелось не получается.
boss911 Отправляешь "сообщение" во временный файл. Туда же отправляешь "выхлоп", и выводишь полученный файл через MORE.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 19:26 15-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...
 
Содержимое FOR должно выводиться по 30 строк, не больше, не меньше, сейчас так и происходит, посему GTR 29 не трогаем.
 
Случай №1. FOR выдает 96 строк, их вывод будет разделен на 30/30/6 строк и между ними пауза. Так и надо.
 
Случай №2. FOR выдает только 30 строк, после чего пауза. Как сделать, если содержимое FOR состоит из вывода в 30 строк, то вместо паузы должно быть GOTO:EOF ? То есть, в этом случае, паузу после 30-й строки не надо делать.
 
Короче говоря, альтернативная задача, :MORE нужно вызывать только тогда, если больше 30-ти строк в FOR, если равно или меньше 30-ти, тогда @ECHO.%%B.
 
Второй час сижу, и так и сяк, не получается, хелп. Если можно, без дополнительных меток в данном примере.

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

Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 15:43 25-06-2016 | Исправлено: boss911, 18:05 25-06-2016
YuS_two



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

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

Каких меток? Тут впору ещё один цикл запускать для предварительного расчета общего количества строк, а потом уже условный блок прикручивать...
Надо бы как-то повнятнее условия описать... а то не очень понятно, что требуется в итоге.
Типа:
Считаем строки в общем количестве = n
Вывод n строк и больше - выполняем то-то
Вывод меньше n строк - выполняем это...
 
Без всяких случаев, только это описание...

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 17:44 25-06-2016 | Исправлено: YuS_two, 17:47 25-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two
 
Метка. это то, что у меня :MORE, хотелось бы чтобы больше без меток, если можно. Мой код основан на вашей подсказке, но требуются изменения. Пояснить мне не просто, так как я не знаю, каким путем лучше и правильно пойти.
 
Если выхлоп из FOR имеет ровно или менее 30 строк, тогда выводим их и потом ECHO =<30.
Если выхлоп из FOR имеет больше 30 строк, после 30-й выполняем pause и clc и так каждый раз после каждой 30-й строки, то есть разбиваем выхлом на блоки по 30 строк.

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

Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 18:32 25-06-2016 | Исправлено: boss911, 18:41 25-06-2016
YuS_two



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

Цитата:
Если выхлоп из FOR имеет ровно или менее 30 строк, тогда выводим их и потом ECHO =<30.  
Если выхлоп из FOR имеет больше 30 строк, после 30-й выполняем pause и clc и так каждый раз после каждой 30-й строки, то есть разбиваем выхлом на блоки по 30 строк.

Вообще-то этот цикл так и работает, как Вы желаете. У меня ведь было проверочное число на 30 строк, а у Вас 29 и удалена команда выхода после цикла, т.е. Вы получаете один лишний проход... и неправильную работу кода.  
Надо так:  
Ваш код с поправкой:

Код:
FOR /F "Tokens=1* Delims==" %%A IN ('SET Line') DO  CALL:MORE "%%B"  
echo.
echo "END lines"
timeout 3&&exit
 
 :MORE  
  SET /A CNT+=1  
  @ECHO.%~1  
  IF %CNT% GTR 29 (SET CNT=0 & ECHO. & PAUSE & CLS)  
 GOTO:EOF

 
 

Цитата:
Метка. это то, что у меня :MORE, хотелось бы чтобы больше без меток, если можно.

Что такое метка я знаю. Тут другое непонятно - отчего такая нелюбовь к ним?
Можно Ваш код вообще без меток сделать:

Код:
setlocal enabledelayedexpansion
FOR /F "Tokens=1* Delims==" %%A IN ('SET Line') DO (
    SET /A CNT+=1
    @ECHO.%%B
    IF !CNT! GTR 29 (SET CNT=0 & ECHO. & PAUSE & CLS)
)
endlocal
echo.  
echo "END lines"  
timeout 3&&exit

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 20:23 25-06-2016 | Исправлено: YuS_two, 04:04 26-06-2016
boss911



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two
 
К сожалению, так не получается, я так уже пробовал. Дело в том, что при GTR 30 вывод из FOR будет состоять из 31 строки, а мне надо СТРОГО 30 и НЕ больше, вот почему в моем в коде GTR 29. FOR выводит 30-ю строку, GTR 29 это фиксирует и ставит на паузу. Именно так у меня GTR работает. И я повторюсь, если выхлоп из FOR состоит только из 30 строк или менее, то паузу после 30-й ставить не надо.
 
Видимо вы изначально были правы. Сначала нужно выяснить, подсчитать количество выводимых строк. Если N строк равно или менее 30, то просто их выводим и потом echo "=<30". Если N строк больше 30, тогда выводим по 30 строк с паузой между каждыми 30 строк. Как-то так, суть такова, но вам виднее, как осуществить.
 

Цитата:
Тут другое непонятно - отчего такая нелюбовь к ним?

Мой основной код и так содержит метки, все по своим группам (для личного удобства), не люблю, когда метка и внутри еще одна (пирамида), а если будет метка внутри ней еще одна и в ней еще одна, такой матрешности я не "переживу". Это больше для личной эстетики.

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

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



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

Цитата:
К сожалению, так не получается, я так уже пробовал. Дело в том, что при GTR 30 вывод из FOR будет состоять из 31 строки, а мне надо СТРОГО 30 и НЕ больше, вот почему в моем в коде GTR 29. FOR выводит 30-ю строку, GTR 29 это фиксирует и ставит на паузу. Именно так у меня GTR работает. И я повторюсь, если выхлоп из FOR состоит только из 30 строк или менее, то паузу после 30-й ставить не надо.

А, ну да, если надо строго n строк, то в счетчике необходимо после вывода строки делать проверку на число n-1, ведь там стоит проверка на "больше", а 30 строк уже выведено и если число будет 30, то будет вывод и 31 строки с последующей проверкой по условию...
 
Так, кажется дошло, что требуется: Необходимо делать паузу после каждых 30 строк, но если ровно 30 строк в тексте последние, то дополнительную паузу  
не выводить - так? Если да, то:

Код:
FOR /F "Tokens=1* Delims==" %%A IN ('SET Line') DO  CALL:MORE "%%B"
echo.
echo "END lines"
timeout 3&&exit
 
:MORE
IF %CNT% GTR 29 (SET CNT=0 & ECHO. & PAUSE & CLS)
SET /A CNT+=1
@ECHO.%~1
GOTO:EOF

 
Либо:

Код:
setlocal enabledelayedexpansion  
FOR /F "Tokens=1* Delims==" %%A IN ('SET Line') DO (  
    IF !CNT! GTR 29 (SET CNT=0 & ECHO. & PAUSE & CLS)  
    @ECHO.%%B  
    SET /A CNT+=1  
)  
endlocal  
echo.  
echo "END lines"  
timeout 3
exit

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



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_two
 
Если вы не против, давайте перейдем в ПМ, а то мы тут долго еще будем обсуждать. Сейчас напишу более подробно и что там будет выводиться.

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

Всего записей: 3586 | Зарегистр. 29-01-2005 | Отправлено: 04:38 26-06-2016
YuS_two



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

Цитата:
Если вы не против, давайте перейдем в ПМ, а то мы тут долго еще будем обсуждать.

Вроде бы, ПМ уже не требуется... до меня дошло то, что требовалось Предыдущий свой пост подкорректировал.

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 05:38 26-06-2016
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Окончательный вариант почти универсальной замены more, для вывода текста:
Преимущества:
1. Возможность выбора количества выводимых строк на один экран.
2. Возможность добавления пустых строк через заданное количество непустых.
3. Возможность добавления дополнительного сообщения перед выводом текста.
4. А что ещё надо?
 

Код:
@echo off
rem v 1.2(c)YuS
echo.&echo Message...&echo.
rem Всего выводимых строк:
set lin=30
rem Количество непустых строк, после которых добавляем пустую строку:
set /a sp=5
rem Инициализация переменных для счетчика:
set /a m=lin-1, i=0, cnt=0
if %sp%==0 (set st=-1) else (set st=%sp%)
rem Вывод строк:
for /f "delims=" %%b in ('type text.txt') do  call :MORE "%%b"  
echo.
echo "END lines"
timeout 5&&goto EOF
:MORE
if %i%==%st% (echo.&set /a cnt+=1&set i=0)
if %cnt% gtr %m% (set cnt=0&echo.&pause&cls)
echo.%~1
set /a cnt+=1
set /a i+=1
exit /b

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть дос флэшка, с неё нужно прошить биос видеокарты
Код:
atiflash -f -p 0 290.rom
клавиатуры нет, только мышка. Как осуществить?

Всего записей: 155 | Зарегистр. 05-03-2012 | Отправлено: 22:24 26-06-2016
YuS_two



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

Цитата:
Есть дос флэшка


Цитата:
клавиатуры нет, только мышка.

А клавиатуру мышь съела? шутка
Если нет клавиатуры, а флеш загрузочная и именно dos, тогда поместите в корень файл autoexec.bat и пропишите требуемые команды в него...

Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 04:43 27-06-2016
Fossyara



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

Всего записей: 155 | Зарегистр. 05-03-2012 | Отправлено: 13:02 27-06-2016
tdmods

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ мне подсказка. Нужно bat составить или что то подобное:
1) Проверяем жив ли процесс.
2) Если жив, то ничего не делаем.
3) Если не жив, то проверяем живы ли еще два процесса.
4) Если оба процесса живы, то подождать 60 секунд и убить оба процесса.

Всего записей: 180 | Зарегистр. 09-11-2015 | Отправлено: 17:33 03-07-2016
king_stiven

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tdmods
tasklist| 1>nul 2>nul  find "cmd.exe" || tasklist| 1>nul 2>nul find "calc.exe" && tasklist| 1>nul 2>nul find "notepad.exe" && sleep 60 && 1>nul Taskkill /F /IM notepad.exe  /IM calc.exe
 
Пауза здесь sleep 60 , если такой команды нет, то парни подскажут и в шапке были паузы.

Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 22:40 03-07-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