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

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

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

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. Справочник администратора
 
· Скрываем консольные окна
· 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)

Всего записей: 2250 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: cchameleone, 20:42 22-02-2018
YuS_2



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

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

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

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

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

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



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

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

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



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

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

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

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

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

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



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

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

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

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

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

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

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



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

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

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

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

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

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



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

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

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


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

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



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

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

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

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

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

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

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

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



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

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

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

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

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


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

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

 

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

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

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

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



Advanced 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 здесь какой-либо код для выполнения

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

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

Silver 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\
 

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

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

Full 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` и так удалит все файлы.

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru