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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VV189

Цитата:
Раз вы так любите нюансы, то уточню

эмм... нюанс и нонсенс - не синонимы даже.
И grep - это ведь не cmd, т.е. не встроенное средство, это всего лишь порт из никсов, потому говорить о регулярках в cmd можно только при условии наличия внешних средств.
Не знаю как там дела обстоят в 10-ке, у меня её просто нет, но знаю, что там внедрили подсистему ubuntu в виде эмулятора - вот там, наверное, можно уже говорить о наличии регэкспов в cmd "изкаропки", пусть и в виде эмулятора.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:28 11-09-2017
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2
FINDSTR вполне себе искаробочный

Всего записей: 12802 | Зарегистр. 11-03-2002 | Отправлено: 11:45 11-09-2017
YuS_2



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

Цитата:
FINDSTR вполне себе искаробочный

о нем, как раз, я не забыл:

Цитата:
что-то очень весьма и весьма отдаленно напоминающее регулярки.
 11-09-2017

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:01 11-09-2017
sniffspb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем огромное спасибо за помощь!
Работает -  
@echo off  
SETLOCAL  
SET pth="C:\Program Files\Proga"
SET flt=/1.exe/1.txt/script.cmd/  
cd /d %pth%  
for /f "delims=" %%a in ('dir /b') do echo %flt% | find "/%%a/">nul || del /q/f "%%a"
Удаляет все файлы в Proga,только вот папки оставляет,но пустые.
Как еще добавить удаление папок внутри Proga ?

Всего записей: 24 | Зарегистр. 09-05-2007 | Отправлено: 15:11 11-09-2017 | Исправлено: sniffspb, 15:14 11-09-2017
YuS_2



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

Цитата:
Как еще добавить удаление папок внутри Proga ?

В моем варианте на powershell - проще простого, надо добавить в конец команды удаления параметр -rec
А чтобы всё это исполнялось из cmd, надо записать так:
script.cmd

Код:
@echo off
set "pth=c:\temp\*"
set "flt=1.exe,1.txt,script.ps1,script.cmd"
echo Выполняем...
powershell -executionpolicy bypass "&{del %pth% -exc %flt% -rec}"
echo Готово.
pause

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 15:48 11-09-2017 | Исправлено: YuS_2, 15:48 11-09-2017
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как сделать "*.bat" для сбора сведений о системе.
... Разобрался сам.
Получилось сделать так: в папке "Log" создаётся файл "log.txt" и в нём получаются строки содержащие дату, время, имя пользователя, имя компьютера, процессор, версия ОС и разрядность:
Подробнее...

Всего записей: 634 | Зарегистр. 28-01-2006 | Отправлено: 17:40 12-09-2017 | Исправлено: Start, 02:30 18-09-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос не про батники и cmd, но немного связан с этим.
 
Кто в курсе и может направить на нужные сылки что бы можно было достать самодостаточные ехе-шники для командной строки что могут генерировать случайные числа (и символы)? Что-то что может заменить тот же %RANDOM% который совсем деревянный.
 
Обычно это так-называемые генераторы паролей, но мне скорее нужен генератор чисел.
Вполне неплохой вариант нашёл тут: http://www.winutilis.net/html/app/pwg/ но приложение како-то грамоздкое почти 3 МБ. Нужно что-то простое и маленькое без крипто-наваротов и безопасности, а просто качественный генератор случайных чмсел.
С VBS, Perl, Python, и.т.д. могу разобраться и сам, но я спрашиваю про готовый маленький ехе.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 00:21 19-09-2017
GCRaistlin



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

Цитата:
%RANDOM% который совсем деревянный

В чем сие выражается?

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

Всего записей: 4131 | Зарегистр. 18-04-2005 | Отправлено: 00:48 19-09-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Деревянный в смысле простой и "неповоротливый".
Он же просто выдаёт целые значения от 0 до 32767 и ничего более, да и сам генератор вроде самый простой что генерирует не очень качественно.
Например надо 16-значное число выровненное нулями слева если меньше 16 цифр и желательно получить это одним вызовом приложения с несколькими параметрами, а не плесать и жонглировать %RANDOM%-ами в батнике.
А ещё лучше если можно будет генерировать и символы, и hex, и base64, и.т.д.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 01:14 19-09-2017 | Исправлено: smartiom, 01:17 19-09-2017
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
smartiom
Что значит - не очень качественно? Задача-то какая стоит?

Цитата:
Он же просто выдаёт целые значения от 0 до 32767 и ничего более

Можно получить несколько рандомов подряд. Причем прямо в одной строке. И дальше делать с ними что душе угодно.

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

Всего записей: 4131 | Зарегистр. 18-04-2005 | Отправлено: 01:37 19-09-2017
YuS_2



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

Цитата:
Деревянный в смысле простой и "неповоротливый".

Надо просто научиться его готовить, это же cmd...
 

Код:
@echo off
rem Псевдорандом - вывод n-разрядного числа в m знаков
rem Нет ограничений рандома cmd в 32768
set m=16 &: количество цифр в выводе
set n=16 &: разрядность
set chr=0 1 2 3 4 5 6 7 8 9 A B C D E F &: символы используемые в выводе
 
:loop
set /a k=1+%n%*%random%/32768
for /f "tokens=%k%" %%i in ("%chr%") do (set num=%%i%num%)
set /a m-=1
if %m% gtr 0 goto loop
echo %num%
pause

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 07:52 19-09-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
"не очень качественно" значит например вот это https://blogs.msdn.microsoft.com/oldnewthing/20100617-00/?p=13673 (если нет проблем с английским)
 
YuS_2
Я понимаю что можно "жонглировать" как я писал выше и получить разные ухищрения. И на SO есть не мало примеров. Наверное в ВАТ-е можно написать и свой енкриптор/декриптор, но зачем? Мне бы ехать а не шашечки в виде таких простыней cmd. Не зря же есть разные приложения для таких целей.
Но всё равно спасибо за ваш пример, никогда не будет лишним, особенно для тех кто будет искать примеры только в ВАТ-е без сторонних прог.
 
Тем временем сам также не стою на месте и продолжаю поиски. Нашел ещё вот такие вещи, может кому-то ещё пригодятся:
OpenSSL - "openssl rand": из командной строки можно получить hex и base64 ( https://wiki.openssl.org/index.php/Manual:Rand%281%29 )
Practically Random - генерирует байты разными PRNG алгоритмами ( https://sourceforge.net/projects/pracrand/ )

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 13:26 19-09-2017
GCRaistlin



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

Цитата:
"не очень качественно" значит например вот это


Код:
 
echo %random%_%random%
 

ЧЯДНТ?
 

Цитата:
Мне бы ехать а не шашечки в виде таких простыней cmd.

Напротив, вам уже дали возможность ехать. А вы все ищете шашечки.

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

Всего записей: 4131 | Зарегистр. 18-04-2005 | Отправлено: 14:05 19-09-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Значит у всех разные понятия "шашечек" и "ехать".
Я понимаю что я уже могу решить (и мог до того как спросил тут в теме) свои задачи, но я спрашивал про другое. Если кто-то знает про то что спросил и хочет поделиться, я только благодарен за помощь.
 
По поводу "ЧЯДНТ?"
Если знакомы с Perl-ом, выполните это (думаючто и в Python-е и во многих других средах для скриптов можно это сделать):

Код:
 
print `echo %RANDOM%`;
print `echo %RANDOM%`;
 

а потом вот это (желательно несколько раз и посмотрите на разницу между 2 значениями)

Код:
 
print `echo %RANDOM%`;
sleep 1;
print `echo %RANDOM%`;
 

и может быть поймёте что не так с %RANDOM%-ом.
Вкратце: есть большие проблемы если надо выполнить одновременно много параллельных скриптов что используют %RANDOM%.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 14:56 19-09-2017
GCRaistlin



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

Цитата:
есть большие проблемы если надо выполнить одновременно много параллельных скриптов что используют %RANDOM%

Кони в вакууме, кони серые... Но попробуйте запустить параллельно вот это:

Код:
 
for /f "skip=3 tokens=2 eol=" %%A in ('tasklist /fi "IMAGENAME eq cmd.exe"') do (
  set CurrentPID=%%A
)
set /a random=CurrentPID*%random%
echo %random%
 


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

Всего записей: 4131 | Зарегистр. 18-04-2005 | Отправлено: 16:04 19-09-2017
smartiom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Вы наверное любите головоломки или что-то подобное и пытаетесь всё сделать в ВАТ-е, но с вашим %RANDOM%-ом мы уже зафлудили тему. Наверное вы его очень цените и полностью им довольны. Я - нет. Думаю не стоит привести всё новые доводы что что-то возможно сделать. Я просто спросил про готовые приложения командной строки что могут справятся с генерированием случайных данных. Если знаете про такие, можете написать (если хотите).
То что я привёл выше для меня не кони а вполне реальная ситуация.
Если есть желание возиться с этим %RANDOM%-ом то лучше в ЛС.

Всего записей: 109 | Зарегистр. 17-03-2006 | Отправлено: 20:10 19-09-2017
YuS_2



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

Цитата:
Значит у всех разные понятия "шашечек" и "ехать".

Вряд ли. Слишком просто всё в этих понятиях.
И Ваш случай тоже не исключение. Говоря иначе: Вам нужен результат или инструмент для получения результата? Т.е. результат - это ехать, а шашечки - поиск инструмента для того, чтобы поехать.
 

Цитата:
понимаю что можно "жонглировать" как я писал выше и получить разные ухищрения.

Это не ухищрения и не жонглирование, а всего лишь код, с помощью которого получаем:
 19-09-2017

Цитата:
надо 16-значное число выровненное нулями слева если меньше 16 цифр и желательно получить это одним вызовом приложения с несколькими параметрами


Цитата:
А ещё лучше если можно будет генерировать и символы, и hex

Т.к. подробности в условиях у Вас отсутствуют, то и результат - соответствующий, с некоторыми допусками, взятыми "с потолка".
Если требуется вызов с параметрами - реализуется легко... только потребуется описание, какие именно параметры нужны.
 
Поясню немного: Хоть Ваш вопрос про специализированный консольный софт и не оффтопик здесь, но всё же, эта тема больше про батники, сценарии и т.п., в общем про командную строку. И наверное, уже только в случае когда встроенных средств не хватает, по тем или иным причинам, вот тогда уже следует пытаться обращаться ко внешним средствам, в том числе и к приложениям, подобным тому, которое Вы ищете. Если же Вам требовалось только приложение, то надо было сразу так и написать... а лучше (если, конечно, у нас тут такая тема найдется) поискать на форуме более подходящую тему для поиска подобных приложений, имхо.
 
Добавлено:
Чтобы не быть голословным, просто запустите run.bat рядом с test.bat:
run.bat

Код:
@echo off
call test 8 16
call test 20 10
call test 15 5
pause

 
test.bat

Код:
@echo off
@rem Псевдорандом - вывод n-разрядного числа в m знаков
@rem Нет ограничений рандома cmd в 32768
@rem примеры запуска:
@rem test.bat "10" "10"
@rem test.bat 10 0xF
@rem test.bat
@rem Параметр 1 - количество символов в выводе  
@rem Параметр 2 - разрядность
set x=
set y=
set m=
set n=
set num=
echo.%~1|>nul findstr /rc:"[^0-9]"&&(
    echo Параметр 1 может быть только десятичным числом либо его не должно быть
    pause
    exit /b
)
echo.%~2|>nul findstr /rc:"[^0-9A-Fa-fx]"&&(
    echo Параметр 2 может быть десятичным, либо шестнадцатеричным или ^
восьмеричным числом, либо его не должно быть
    pause
    exit /b
)
 
if "%~1" equ "" (set /a x=16) else (set /a x=%~1)
if "%~2" equ "" (set /a y=16) else (set /a y=%~2)
if %y% gtr 16 echo Параметр 2 ^(разрядность^) не может превышать ^
число символов, записанных в переменной chr&pause&exit /b
 
set "m=%x%" &: количество цифр в выводе
set "n=%y%" &: разрядность
set chr=0 1 2 3 4 5 6 7 8 9 A B C D E F &: символы используемые в выводе
 
:loop
set /a k=1+%n%*%random%/32768
for /f "tokens=%k%" %%i in ("%chr%") do (set num=%%i%num%)
set /a m-=1
If %m% gtr 0 goto loop
echo %num%

 
На длинную портянку не обращайте внимание, там были добавлены некоторые проверки на валидность параметров, что, естественно, привело к этому увеличению.

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 20:25 19-09-2017 | Исправлено: YuS_2, 21:01 19-09-2017
GCRaistlin



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

Цитата:
То что я привёл выше для меня не кони а вполне реальная ситуация.

Вполне реальная ситуация? Много экземпляров скрипта, запущенных параллельно, и кровь из носу надо, чтобы %random% возвращал в них разное? И что он у вас делает, этот скрипт?

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

Всего записей: 4131 | Зарегистр. 18-04-2005 | Отправлено: 21:40 19-09-2017
Smitis



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

Цитата:
Кто в курсе и может направить на нужные сылки что бы можно было достать самодостаточные ехе-шники для командной строки что могут генерировать случайные числа (и символы)? Что-то что может заменить тот же %RANDOM% который совсем деревянный.  

cmd+js

Код:
@if (true == false) @end /*
@echo off
for /f "usebackq delims=" %%# in (`%SystemRoot%\system32\cscript.exe //nologo //e:javascript "%~f0" %*`) do set "rnd=%%#"
echo %rnd%
goto :eof */
WScript.Echo(Math.random());

Ну а если нужен отдельный "маленький exe", пишем пару строк на том же js/vbs, но уже как приложение dotnet и компилируем стандартными встроенными компиляторами в маленькое консольное приложение.


----------
Разум когда-нибудь победит

Всего записей: 3445 | Зарегистр. 09-02-2003 | Отправлено: 11:48 20-09-2017
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто знает, расскажите как этим пользоваться.
conv2bat Подробнее...

Всего записей: 634 | Зарегистр. 28-01-2006 | Отправлено: 19:10 20-09-2017
   

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