Консультация № 143213
06.09.2008, 16:30
0.00 руб.
0 1 1
Здравствуйте! Помогите, надо чтото придумать с переменной %random% для командной строки, или если есть информация об этой переменной то можно ссылки, спасибо

Обсуждение

давно
Модератор
137394
1850
06.09.2008, 16:53
общий
это ответ
Здравствуйте, DonaldM!
ИГРА В КОСТИ В КОМАНДНОЙ СТРОКЕ
В приложении - цитата по этой ссылке



Приложение:
Применение генератора случайных чисел в командных файлах Windows открывает некоторые любопытные возможности и в области администрирования: от генерирования случайных кодов и распределения запросов на доступ до моделирования нагрузки. Начиная с операционной системы Windows 2000, в командном процессоре для таких целей предназначена системная переменная %random% (подробный отчет через set/?). Проще всего ее вызвать, напечатав в командной строке

echo %random%
[anonsend]

Она может принимать целочисленные значения от 0 до 32767 (32768 элементов). На первый взгляд это может показаться неудобным, поскольку для практического применения обычно нужны числа из специфических для каждого приложения интервалов. Однако простая трансформация с использованием арифметических возможностей команды set поможет изменить диапазон соответствующим образом. Так, например, выполнение из командной строки:

set /a 1+6 %random%/32768

приведет к генерации случайных чисел в диапазоне от 1 до 6.

Кто хочет, может поиграть в кости в командной строке. Для гибкого применения в командных файлах команда set может быть сформулирована в более общем виде:

set /a R=L+(H-L+1)*%random%/32768

Переменная R принимает случайное значение. Переменные L и H определяют при этом нижнюю и верхнюю границу желаемого числового диапазона (L≤R≤H), причем значения могут быть и отрицательными. Выражение (H-L+1) представляет собой количество элементов в сгенерированном таким образом числовом промежутке.

Итак, многообразному применению случайных чисел в командных файлах больше ничто не препятствует. Среди возможных применений — управление итерациями, ветвление для перехода на заданные ветви или файлы, а также параметризация вызовов программ. Так, например, при значениях L=1 и H=254 в рамках бесконечного цикла можно обращаться ко всем рабочим станциям локальной подсети IP в случайной последовательности:

set L=1
set H=254
:LOOP
set /a R=L+(H-L+1)*%random%/32768
ping 192.168.100.%R%
goto LOOP

Точно так же можно замедлить повторное выполнение команд при помощи случайным образом задаваемой паузы ожидания:

set L=5
set H=25
:LOOP
set /a R=L+(H-L+1)*%random%/32768
echo %time% ждать %R% секунд
sleep %R%s
goto LOOP

Выше применяется известная пользователям операционной системы UNIX команда sleep (версия для Windows доступна для загрузки по адресу: http://unxutils.sourceforge.net/ . Пример соответствует программному циклу с переменной «время ожидания», меняющейся от 5 до 25 с. Собственно вызов программы заменен простым отображением времени суток и времени ожидания.

Случайные числа можно использовать и в качестве указателей на элементы (от 1 до N) заранее определенного списка, как это делается в команде for f. Следующий пример иллюстрирует генерирование 26-значного шестнадцатеричного кода, который может пригодиться при 128-разрядном шифровании WEP в беспроводных локальных сетях:

set I=29
set N=16
set CHAR=0 1 2 3 4 5 6 7 8 9 A B C D E F
:LOOP
set /a R=1+%N%*%random%/32768
for /f “tokens=%R%“ %%I in (“CHAR“) do set
Hex=%%i%Hex%
Set /a I-=1
If %I% GTR 0 goto LOOP
echo %Hex%

Переменная I определяет длину выдаваемого кода, а значение переменной N должно совпадать с количеством элементов списка CHAR. В принципе представленной программой можно воспользоваться для генерирования случайных паролей. Однако, как видно из параметров цикла for f, количество элементов списка ограничено числом 31, этого достаточно для стандартного алфавита, но никакой гибкости применения практически не обеспечивает.

Больше возможностей предлагает операция над переменными а ля set VAR=%VAR:~10,5%, при помощи которой из заданной переменной можно извлечь некоторую подстроку в соответствии с величиной смещения («10») и длиной («5»). Указанное смещение возможно задать и случайным образом. Ниже приведен пример, показывающий, как в символьном массиве (CHAR) определяются доступные для генерирования пароля (PW) символы, и выдается случайный пароль длиной в восемь символов:

set I=8
set N=39
set
CHAR=0123456789$#_abcdefghijklmnopqrstuvwxyz
:LOOP
set /a R=%N%*%random%/32768
set PW=!CHAR:~%R%,1! %PW%
set /a I-=1
if %I% GTR 0 goto LOOP
echo %PW%

Этот пример, где из-за вложенного вызова переменных используется символ «!» вместо «%», работает лишь тогда, когда командный процессор выполняется с опцией отложенного расширения переменных (cmd /V:ON). При соответствующей конструкции цикла таким способом можно генерировать сотни случайных паролей с желаемыми параметрами (в том числе для первого входа в систему или для одноразового использования) и сохранять их в отдельном файле. Причем наряду со строчными буквами алфавита можно применять и заглавные, однако необходимо соблюдать осторожность при указании специальных символов.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа