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

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

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

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

Цитата:
Вот код, который Вам нужен

Я бы записАл по-другому...

Код:
@echo OFF
for /f "usebackq skip=3 tokens=1,2" %%A in (`wmic process where name^="explorer.exe" get creationdate^,processid ^|more +1 ^|sort`) do wmic process where processid=%%B call terminate

wmic (который в скобках) получает список из времён создания и ID процессов explorer.exe, далее more отрезает от списка заголовок, sort сортирует по времени создания, skip в for пропускает паразитные пустые строки из вывода wmic (при сортировке вывода попадают наверх) и строчку с самым старым explorer.exe, а для всех остальных вызывается wmic с terminate по ID процесса.  
Отлаживал на 10-ке Pro, если что...

----------
http://www.imho.ws

Всего записей: 2575 | Зарегистр. 12-10-2006 | Отправлено: 21:56 29-09-2019
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Спасибо за подробный ответ.
Ваш вариант у меня также работает. Надеюсь, что он и у Stone_01 заработает.

Всего записей: 758 | Зарегистр. 07-01-2009 | Отправлено: 21:58 29-09-2019 | Исправлено: Sinclair83, 22:00 29-09-2019
Stone_01



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Протестировал на Win7x64. Ваш вариант сработал прекрасно. Спасибо вам большое!
 
И вам Sinclair83 спасибо огромное еще раз.
 
Вы для меня оба волшебники невидимого фронта!
 
 
 

Всего записей: 352 | Зарегистр. 22-12-2017 | Отправлено: 23:00 29-09-2019 | Исправлено: Stone_01, 23:02 29-09-2019
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пока ковырялся с wmic, заодно решил ещё одну интересную задачу: запуск программы с получением её PID в переменную, что позволяет в дальнейшем отслеживать, не завершилась ли она и/или при необходимости завершать именно её, не трогая одноимённых процессов, которых может быть множество.

Код:
@echo OFF
for /f "tokens=*" %%A in ('wmic Process call create CommandLine^="C:\Windows\System32\cmd.exe /k" CurrentDirectory^="d:\"^|find /i "ProcessId"') do set /a "%%A"
echo %ProcessId%
pause
wmic process where ProcessId=%ProcessId% call terminate
pause

А учитывая, что wmic позволяет управлять процессами в том числе на удалённом хосте - становится совсем интересно...

----------
http://www.imho.ws

Всего записей: 2575 | Зарегистр. 12-10-2006 | Отправлено: 01:00 30-09-2019 | Исправлено: BorlandIMHO, 01:18 30-09-2019
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Следующий батник и/или choice.exe ведёт себя не совсем корректно. При запуске он ждёт нажатия клавиш (A, B, Q), если они не были нажаты, то choice.exe по истечении пяти секунд выбирает вариант по умолчанию, а если нажать A или B, то при следующем вызове choice.exe, вариант по умолчанию автоматически уже не выбирается.
Если из батника исключить строчку с циклом for, то автоматический выбор срабатывает корректно. Либо если изменить строку "Set /p ..." так, чтобы запись в файл была указана в начале строки (>Saved.txt Set /p "С=%A% %B%"<NUL), то автоматический выбор тоже начинает корректно срабатывать.
 
Вопрос: Как и почему это всё связано между собой?
 

Код:
@Echo Off
Set A=0
Set B=0
If exist Saved.txt For /f "Tokens=1,2" %%A in (Saved.txt) do Set "A=%%A" & Set B=%%B
:Show
Cls
Echo.A: %A%
Echo.B: %B%
Echo.
Echo.[A] A+1
Echo.[B] B+1
Echo.[Q] Quit
Echo.
Choice.exe /N /C ABQ /D Q /T 5 >NUL
If ErrorLevel 3 Goto Quit
If ErrorLevel 2 Set /a "B+=1" & Goto Save
Set /a A+=1
:Save
Set /p "C=%A% %B%"<NUL>Saved.txt
Goto Show
:Quit

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 11:01 01-10-2019 | Исправлено: A27, 06:37 03-10-2019
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27
Что там некорректного - честно говоря не понял.  
Запустил приведённый Вами код - срабатывание по таймауту происходит нормально, независимо от того, сколько раз перед этим нажимал A и B...  
{Microsoft Windows [Version 10.0.18362.356], если что.}


----------
http://www.imho.ws

Всего записей: 2575 | Зарегистр. 12-10-2006 | Отправлено: 22:58 01-10-2019 | Исправлено: BorlandIMHO, 23:00 01-10-2019
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO, у меня так:
 
запустил батник
подождал 5 сек
батник завершился
 
запустил батник
нажал A
подождал 5 сек
подождал ещё 5 сек
подождал минуту
подождал 5 минут
батник сам не завершается...
 
P.S. Microsoft Windows [Version 5.2.3790]

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 02:39 02-10-2019 | Исправлено: A27, 02:41 02-10-2019
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27
Сдаётся мне, всё дело в особенностях реализации choice и командного процессора...

Цитата:
Microsoft Windows [Version 5.2.3790]

Именно в этой версии впервые появилась choice.exe (в XP, которая NT5.1 - отсутствовала как класс).
Проверил ещё на свисте и 7-ке (что под рукой оказалось) - в результате корректнось работы есть только на 10-ке. Видать, допилили что-то...
По-видимому, нужно эту особенность просто запомнить и учитывать...

----------
http://www.imho.ws

Всего записей: 2575 | Зарегистр. 12-10-2006 | Отправлено: 15:10 02-10-2019
GCRaistlin



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

Цитата:
запустил батник
нажал A
подождал 5 сек
подождал ещё 5 сек
подождал минуту
подождал 5 минут
батник сам не завершается...  

Ну а с чего бы ему завершаться? Вы же нажали клавишу. Эта опция испокон веков так работала. Задолго до XP, да.
 
BorlandIMHO

Цитата:
корректнось работы есть только на 10-ке. Видать, допилили что-то...

Сломали, иными словами.

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

Всего записей: 4113 | Зарегистр. 18-04-2005 | Отправлено: 15:16 02-10-2019
A27

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

Цитата:
Видать, допилили что-то...

Видимо, выпилили баг.
 
 
GCRaistlin

Цитата:
Ну а с чего бы ему завершаться? Вы же нажали клавишу.

Нажал, а затем, когда choice.exe вызывается повторно, уже не нажимаю. Я полагаю, что если choice.exe с одними и теми же вариантами ответов зациклена в блоке ":Show - Goto Show", то при каждом вызове она должна срабатывать идентично.
 

Цитата:
Эта опция испокон веков так работала. Задолго до XP, да.

Со времён DOS "choice.com"? То есть при повторном вызове choice.com он тоже игнорирует вариант по умолчанию?
 
А как тогда объяснить влияние For и Set? Более того, в DOS для этих команд не было ключей /f и /a.

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 17:55 02-10-2019 | Исправлено: A27, 18:07 02-10-2019
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27
Прошу прощения, думал, вы хотите, чтобы у вас батник закрывался автоматически как без нажатия клавиши, так и с нажатием (не увидел собственно описания проблемы).
 
У меня в Win7 и Win81 не воспроизводится - после нажатия батник завершается. У вас в строке с перенаправлением указана русская "C" - может, тут проблема. Хотя у меня, повторяю, все работает и так.

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

Всего записей: 4113 | Зарегистр. 18-04-2005 | Отправлено: 18:21 02-10-2019
BorlandIMHO

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

Цитата:
 У вас в строке с перенаправлением указана русская "C" - может, тут проблема

Однозначно!
Не сообразил сам проверить...
Заменил на латинскую C - все заработало на XP x64 (той самой "Microsoft Windows [Version 5.2.3790] ").
На остальном зоопарке проверять уже нет смысла...
Мокромягкие допилить-то допилили, но не сказать чтоб "выпилили баг". По-хорощему, при использовании недопустимого имени переменной (русская С в 1251 в cmd со стандартной русской раскладкой при прочих умолчаниях превращается в ) set должен бы кричать о недопустимости такового при первом же использовании и вылетать, а не "срабатывать один раз, после чего безбожно переглючивать всю консоль"...

----------
http://www.imho.ws

Всего записей: 2575 | Зарегистр. 12-10-2006 | Отправлено: 21:31 02-10-2019 | Исправлено: BorlandIMHO, 21:35 02-10-2019
GCRaistlin



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

Цитата:
Мокромягкие допилить-то допилили

Не факт. Проблема неустойчива: то повторяется, то нет.

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

Всего записей: 4113 | Зарегистр. 18-04-2005 | Отправлено: 22:39 02-10-2019
Inoz2000



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

Цитата:
в строке с перенаправлением указана русская "C"
бардак. однозначно.
вот в сообщении andrejka_k гласные все латинские a,e,o

 
Добавлено:
и также согласные - p, c

Всего записей: 5210 | Зарегистр. 23-04-2009 | Отправлено: 22:45 02-10-2019
A27

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

Цитата:
У вас в строке с перенаправлением указана русская "C" - может, тут проблема.

Извиняюсь за этот косяк, исправил. Видимо, когда копипастил код батника на форум, решил заменить маленькую "c" на заглавную т.к. все остальные переменные заглавные и по ошибке ввёл русскую букву. Но на работу батника это, к сожалению, не повлияло, т.к. запустил его, нажал A, и вот пока пишу это сообщение, он висит до сих пор и не завершается.
 
 
BorlandIMHO

Цитата:
Заменил на латинскую C - все заработало на XP x64 (той самой "Microsoft Windows [Version 5.2.3790] ").

Опять же, странно, т.к. у меня проблема никуда не делась. Может быть Вы убрали For или изменили строку Set?

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 06:47 03-10-2019 | Исправлено: A27, 07:02 03-10-2019
GCRaistlin



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

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

Всего записей: 4113 | Зарегистр. 18-04-2005 | Отправлено: 12:32 03-10-2019
MihailM



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А каким знаком в имени каталога или файла заменить пробелы в батнике , а то у меня есть путь типа "каталог один" , и команда обрабатывает только первую часть этого имени . То есть батник не рабочий получается .

Всего записей: 2577 | Зарегистр. 19-10-2003 | Отправлено: 12:57 03-10-2019
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
Взять имя/путь в кавычки

Всего записей: 12738 | Зарегистр. 11-03-2002 | Отправлено: 13:00 03-10-2019
MihailM



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

Всего записей: 2577 | Зарегистр. 19-10-2003 | Отправлено: 13:29 03-10-2019 | Исправлено: MihailM, 13:32 03-10-2019
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MihailM
Во-первых, del /f /q
Во-вторых, что вас прет на парсинг вывода dir, когда есть for /r

Всего записей: 12738 | Зарегистр. 11-03-2002 | Отправлено: 13:38 03-10-2019
   

Страницы: 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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru