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

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



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

Цитата:
это очень мощное средство

На самом деле, MS-DOS - вот это мощь была... в прошлом веке... как и cmd, впрочем...
Для своего времени - всё было хорошо, но хорошо и то, что прогресс не стоит на месте. Но, согласен, в некоторых случаях, вполне достаточное средство выполнения задач...
А про лаконичность...угу, охотно "верю".  
Например, получите дату 35 дней тому назад от текущей...
Вот это лаконично:

Код:
(get-date).add('-35')

А на cmd так получится?
Или например, круг (или окружность) в консоли нарисуйте... хотя, это уже не совсем простая задача...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 08:06 17-06-2018 | Исправлено: YuS_2, 08:09 17-06-2018
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Речь о том, что можно обращаться и к текущему, и к прошлому (на момент начала выполнения текущей команды) значению переменной. Это удобно.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 11:14 17-06-2018
YuS_2



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

Цитата:
Речь о том, что можно обращаться и к текущему, и к прошлому

Ну, я-то говорил вообще, в целом о cmd.
Но даже в этом:

Цитата:
Это удобно.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 13:25 17-06-2018
GCRaistlin



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

Цитата:
Удобство - дело привычки... это никакое не преимущество.

Почему же не преимущество, если не нужно множить число сущностей? Это улучшает читаемость кода.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 14:44 17-06-2018
Wu Tang



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

Цитата:
Дык я и говорю, это уже по потребности.  
Например:  
Требуется определение конкретного окна cmd при запущенных нескольких - добавляете во все сценарии функцию выковыривания PID, а далее, либо в title впихнуть можно (set title=%PID%), либо вообще в файл-флаг, создаваемый для каждого окна, вынести... в общем, сначала определитесь, надо ли идентифицировать окна и если надо, то с какой целью, затем уже сформулируйте задачу целиком... а вот потом уже можно будет подсказать, куда и зачем запихивать этот PID.  
 
В данном случае, главное то, что принципиальная возможность однозначной идентификации cmd-окон есть...

 
как я понял, pid в вашем скрипте является переменным, те в скрипт мне нужно вписать pid моего окна/процесса, иначе как он поймет, какой процесс ему перезапускать, либо я чего-то не догоняю.
 
VVL99

Цитата:
Можно и так, убиваем все батники, затем снова всё запускаем или прямо в юзерском скрипте дописываем проверку на время и при наступлении часа х, он сам выгружается, и плюс условие на запуск, если время больше 8:59 и меньше 9:01, то выход, а параметр запуска тоже можно если файл запускается с параметром "1", то без ограничений.  
  •  Пример скрипта  
Если где ошибся, поправьте плз.  
 
Для ясности:  
Оба скрипта выгрузятся в 08:59, юзерский скрипт в период с 08:59 до 09:00 не будет запускаться, в этот период необходимо запустить админский скрипт.  
Что бы скрипт запустился как админский, необходимо в ярлык добавить "1" к адресу, через пробел.
Цитата:
Раз пользователю разрешено закрывать консоль, когда она мешает, то не плохо бы оговорить критерии по которым можно вычислить, что пользователь закончил свою работу.  
Планировщик - это хорошо. Но представьте, что пользователь будет работать дольше обозначенного времени. Что произойдёт? Планировщик запустит консоль по расписанию. Пользователь свои дела ещё не доделал. Консоль ему опять-таки мешает. Он её повторно благополучно закроет. И на этом ВСЁ! Теперь скрипт запустится только на след. день в 9:00.  

 
 

те этот скрипт будет висеть в процессах и мониторить наличие нужного процесса, а также делать перезапуск около 9 утра в случае, если он закрыт, я верно понял?
конечно, хорошо бы обойтись без убивания, в случае, если батник выполняется.
 
ps в общем я упростил задачу и для себя и для вас, оставил один батник в работе, скажем с title 1.
 
Sinclair83

Цитата:
Раз пользователю разрешено закрывать консоль, когда она мешает, то не плохо бы оговорить критерии по которым можно вычислить, что пользователь закончил свою работу.  
Планировщик - это хорошо. Но представьте, что пользователь будет работать дольше обозначенного времени. Что произойдёт? Планировщик запустит консоль по расписанию. Пользователь свои дела ещё не доделал. Консоль ему опять-таки мешает. Он её повторно благополучно закроет. И на этом ВСЁ! Теперь скрипт запустится только на след. день в 9:00.  

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

----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3773 | Зарегистр. 15-10-2007 | Отправлено: 20:42 17-06-2018
YuS_2



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

Цитата:
Это улучшает читаемость кода.

Любишь ты поспорить с очевидным - это невероятно!
Уж что-что, а читаемость кода, эти различные способы раскрытия переменных для разных мест в том самом коде, точно не улучшают, а только запутывают, особенно пользователей без опыта работы с cmd...
 
Wu Tang

Цитата:
как я понял, pid в вашем скрипте является переменным, те в скрипт мне нужно вписать pid моего окна/процесса, иначе как он поймет, какой процесс ему перезапускать, либо я чего-то не догоняю.

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:17 17-06-2018
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Да нет, это ты постоянно принимаешь свое субъективное мнение за очевидное. Любая новая переменная ухудшает читаемость кода, потому что краткое имя не объясняет ее сущности, а длинное - делает код громоздким.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 21:44 17-06-2018
Wu Tang



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
ну, что я сделаю, я же не виноват, что мне хреново было. (((
 
вот последние наши посты - http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=1300
ну, а если pid окна при каждом запуске меняется, тогда как быть?


----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3773 | Зарегистр. 15-10-2007 | Отправлено: 23:20 17-06-2018
YuS_2



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

Цитата:
Да нет, это ты постоянно принимаешь свое субъективное мнение за очевидное.

Ну, на счет постоянства - это ты загнул, конечно.
Естественно, субъективностью пропитан весь наш мир, это да... и твое личное мнение, тоже имеет право на существование.
Но, тут главное в том, чтобы ты свое субъективное, не выдавал за объективное, остальное - мелочи жизни.
 
 
 
Wu Tang

Цитата:
ну, а если pid окна при каждом запуске меняется, тогда как быть?

Так это ведь, как раз и требуется при  определении уникального окна cmd... или я уже совсем забыл задачу?
Вообще, лучше всё же так:

Цитата:
в общем, сначала определитесь, надо ли идентифицировать окна и если надо, то с какой целью, затем уже сформулируйте задачу целиком... а вот потом уже можно будет подсказать, куда и зачем запихивать этот PID.

 
А чтобы передавать PID в другие скрипты...
Например, простое решение: добавлять PID в title окна (уже описывал как), т.е. у каждого окна, даже запущенного одним и тем же скриптом, всё равно, будет индивидуальный title. А по нему уже можно манипулировать тем окнам как душе угодно.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 23:54 17-06-2018
GCRaistlin



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

Цитата:
тут главное в том, чтобы ты свое субъективное, не выдавал за объективное, остальное - мелочи жизни.

Так эти понятия вроде как раз не я склонен путать.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 00:14 18-06-2018
Wu Tang



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

Цитата:
Так это ведь, как раз и требуется при  определении уникального окна cmd... или я уже совсем забыл задачу?  

да не, не забыл.
 

Цитата:
А чтобы передавать PID в другие скрипты...  
Например, простое решение: добавлять PID в title окна (уже описывал как), т.е. у каждого окна, даже запущенного одним и тем же скриптом, всё равно, будет индивидуальный title. А по нему уже можно манипулировать тем окнам как душе угодно.
 

 
в общем что я сделал, оставил один батник, прописал title test, окно батника стало называться test, но в диспетчере по прежнему идет, как cmd.exe и что дальше делать я никак не въеду.
 
BorlandIMHO
http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=1300#14
ваш скрипт как не правлю, запускает еще один процесс поверх.
 
те

Код:
@echo off  
SET "test=C:\test.bat"  
wmic process Where (ExecutablePath like '%%cmd.exe%%') get CommandLine /value | 1>nul findstr /i /c:"%test%" || start "" "%test%"


----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3773 | Зарегистр. 15-10-2007 | Отправлено: 03:36 18-06-2018 | Исправлено: Wu Tang, 03:42 18-06-2018
5nizza13

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос:
Есть батник, который упаковывает файлы и приписывает к архиву дату упаковки. Нужно, чтоб на этот архив ставился пароль. Как это действие, если возможно прописать в батнике?

Всего записей: 8 | Зарегистр. 17-04-2018 | Отправлено: 05:21 18-06-2018
Inoz2000



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

Цитата:
Есть батник, который упаковывает файлы
Сильно в этом сомневаюсь. Скорее всего, упаковкой файлов в батнике занимается архиватор.
Цитата:
Нужно, чтоб на этот архив ставился пароль. Как это действие, если возможно прописать в батнике?
Нужно в этом батнике добавить в команду запуска архиватора
    две вещи:
  1. параметр, задающий добавление пароля
  2. и сам пароль.

 

----------
Мы все умрём. (-:

Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 06:37 18-06-2018
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
5nizza13
Зависит от архиватора. Например, в Winrar удобно создать нужные профили сжатия (которые могут содержать любые предустановки, включая пароль на архивы) и ссылаться из батника не на строку параметров, а на готовый профиль, типа
 
WinRAR.exe a "-cpProfile_1"
 
где Profile_1 - профиль сжатия с предопределенными параметрами.

Всего записей: 1316 | Зарегистр. 17-01-2011 | Отправлено: 06:39 18-06-2018
YuS_2



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

Цитата:
Так эти понятия вроде как раз не я склонен путать.

Да ладно? Могу примеры привести, из недавнего:
Субъективность, выдаваемая за очевидность, т.к. форма написания: утверждение. По пунктам:
1.

Цитата:
Любая новая переменная ухудшает читаемость кода, потому что краткое имя не объясняет ее сущности, а длинное - делает код громоздким.

С чего бы это? Если переменные требуются для работы кода, то зачем необходимо вводить ограничение на их количество или на длину имени? Чтобы улучшить читаемость кода? Читаемость кем? Тобою? Добавь сюда: "для меня лично" и всё встанет на свои места.
Кроме того, в любом случае, для улучшения читаемости кода существуют комментарии. Нет?
2.

Цитата:
Почему же не преимущество, если не нужно множить число сущностей? Это улучшает читаемость кода.

Как может привычка улучшать читаемость кода? Это всего лишь персональное свойство человека, не более того. И сюда добавь: "для меня лично"
3.

Цитата:
Речь о том, что можно обращаться и к текущему, и к прошлому (на момент начала выполнения текущей команды) значению переменной. Это удобно.

А это пересечение с п.2.. Удобно для кого? Того, кто к этому привык? Опять же, добавь: "Это удобно для меня лично".
4.

Цитата:
На самом деле, это очень мощное средство, позволяющее с помощью лаконичного кода делать интересные вещи.

Про лаконичность ты так и не ответил. И про мощность - это объективно? А примеры где?
и т.д., листать весь топик лень.
 
А ты можешь привести подобные примеры моих бездоказательных высказываний, представленных в виде утверждений?
Так что давай обойдемся без переходов на личности...  
 
Wu Tang

Цитата:
оставил один батник, прописал title test, окно батника стало называться test, но в диспетчере по прежнему идет, как cmd.exe и что дальше делать я никак не въеду.

Что делать дальше, зависит от задачи... а что сделать надо? Убить процесс или что?
Пошел искать задачу... если это она:

Цитата:
есть батник в работе, юзер его иногда выключает, нужно сделать проверку его работы каждый день в 9 утра и если не работает, то запускать, если работает, то пропускать, как реализовать?

то, помещаем в планировщик такой батник:
test.bat

Код:
@echo off
tasklist /fi "windowtitle eq onestart*"|>nul find "cmd"&&(echo уже запущен, закрываем&timeout 3&exit)
title onestart
 
echo стартуем один раз
rem здесь какой-либо код для выполнения

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

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:04 18-06-2018 | Исправлено: YuS_2, 11:07 18-06-2018
usalex

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Удаляю временные файлы и папки вот таким батником:

Код:
 
del /s/f/q/a %TEMP%\* %USERPROFILE%\AppData\Local\Temp\*
 
cd %TEMP%
RD /s/q %TEMP%
 
cd %USERPROFILE%\AppData\Local\Temp\
RD /s/q %USERPROFILE%\AppData\Local\Temp\
 

 
Он нормально работает - удаляет только содержимое временных папок, не удаляя сами папки.
 
Но по аналогии делаю батник для удаления содержимого папки "123" и удаляется не только содержимое, но и сама папка "123".

Код:
 
del /s/f/q/a D:\123\*
 
cd D:\123
RD /s/q D:\123\
 

 
Подскажите, плиз, что не так?
(мне ведь только содержимое нужно удалять, а папку оставить пустой, не удаляя её)

Всего записей: 6215 | Зарегистр. 20-12-2004 | Отправлено: 17:42 19-06-2018 | Исправлено: usalex, 17:44 19-06-2018
lvqcl

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

Цитата:
Подскажите, плиз, что не так?

 
rd /s должна удалять и саму папку. Но так как папка является текущей для cmd.exe (из-за предыдущей команды cd), она не может быть удалена.
 
Судя по всему, команда `cd D:\123` не выполняется. Можно попробовать добавить /d:
 
CD /D D:\123  
RD /S/Q D:\123\
 
Ещё, по идее, `del /s/f/q/a` прямо перед `rd /s/q` не нужен - `rd /s` и так удалит все файлы.

Всего записей: 1142 | Зарегистр. 03-02-2007 | Отправлено: 17:56 19-06-2018
usalex

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lvqcl
Спасибо большое! Всё, как вы и сказали - сработало в лучшем виде (без `del /s/f/q/a`) - сама 123 на месте и пустая.
То, что надо.
Значит и для временных папок переделаю батник.
Странно, что на временных папках было все нормально, а для 123 почему-то "команда `cd D:\123` не выполняется".

Всего записей: 6215 | Зарегистр. 20-12-2004 | Отправлено: 18:04 19-06-2018
lvqcl

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

Цитата:
  Странно, что на временных папках было все нормально, а для 123 почему-то "команда `cd D:\123` не выполняется".

 
Думаю, что просто текущий диск - C:, и на нем же расположены %TEMP% и %USERPROFILE%. Вот команда CD и работает. А на другой диск без ключа /D не перейдешь.

Всего записей: 1142 | Зарегистр. 03-02-2007 | Отправлено: 18:09 19-06-2018
usalex

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lvqcl
Спасибо за пояснения.
 
Поправил батник, но не срабатывает удаление из временной папки винды, если записано так: cd /D %TEMP%
 
Пришлось в явном виде записать: cd /D C:\Windows\Temp\  -- и тогда всё удаляется нормально.
А для cd /D %USERPROFILE%\AppData\Local\Temp\ прокатывает без указания в явном виде - всё удаляется.

Всего записей: 6215 | Зарегистр. 20-12-2004 | Отправлено: 18:25 19-06-2018 | Исправлено: usalex, 18:26 19-06-2018
   

Страницы: 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