|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Выбрать случайные символы. |
|
|
CMD/BAT - Выбрать случайные символы.
|
Новый участник Сообщения: 29 |
Среда win xp.
Задано несколько символов. Допустим '1,5,8,3,s,h,n' Нужно случайным образом выбрать три из них. Повторения допускаются. |
|
Отправлено: 21:24, 30-03-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set sValues=1,5,8,3,s,h,n for /l %%i in (1, 1, 20) do ( call :GetRandom call :GetValue !Random! %sValues% echo [!Value!] ) endlocal exit /b 0 :GetRandom setlocal enableextensions enabledelayedexpansion set sOut=%~0 for /f "usebackq delims=" %%i in ( `mshta.exe "javascript:new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Math.floor(Math.random() * 7).toString());close();" 1 ^| more` ) do ( set /a iRandom = %%i ) endlocal & set %sOut:~4%=%iRandom% exit /b :GetValue setlocal enableextensions enabledelayedexpansion set sOut=%~0 set /a iCount = %~1 for /l %%i in (1, 1, %iCount%) do shift /2 set sValue=%~2 endlocal & set %sOut:~4%=%sValue% exit /b Для демонстрации выбирается двадцать значений, замените на потребное Вам «3». Псевдослучайное значение генерируется JScript-кодом посредством mshta.exe. |
Отправлено: 22:10, 30-03-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать |
Отправлено: 06:04, 31-03-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Откуда там «"Application Data"»? Проверьте, правильно ли Вы скопировали код.
|
Отправлено: 06:54, 31-03-2017 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Чистый CMD
@Echo Off cls Set "Symb=abcdefghijklmno" Set /A "NOut=3" SetLocal EnableExtensions EnableDelayedExpansion Set /A NSymb=-1 FOR /L %%i IN (0,1,20) DO ( Call Set "ii=%%Symb:~%%i,1%%" If Not "!ii!"=="" Set NSymb=%%i ) Set /A NSymb+=1 :Begin Set "SOut=" FOR /L %%j IN (1,1,%NOut%) DO ( FOR /L %%i IN (1,1,100) DO Set /a rnd=!random! Set "rnd=000!rnd!" Set /A rnd=1!rnd:~-3!-1000 Set /A rnd=%NSymb%*!rnd!/999 Call Set "rnd=%%Symb:~!rnd!,1%%" Set "Sout=!Sout!!rnd!" ) Echo %Sout% pause >nul GoTo :Begin |
|
------- Отправлено: 15:44, 31-03-2017 | #5 |
Забанен Сообщения: 793
|
|
Отправлено: 16:56, 01-04-2017 | #6 |
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Уверены, что это должно работать на голой xp sp3?
У меня не завелись оба варианта. Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\name>C:\1.bat C:\Documents and Settings\name>setlocal enabledelayedexpansion C:\Documents and Settings\name>set "map=1583shn" C:\Documents and Settings\name>set "i=0" C:\Documents and Settings\name>set /a "i+=1", "j=7*1144/32767" C:\Documents and Settings\name>set "r=!r!!map:~0,1!" C:\Documents and Settings\name>if !i! NEQ 3 goto:loop C:\Documents and Settings\name>set /a "i+=1", "j=7*32076/32767" C:\Documents and Settings\name>set "r=!r!!map:~6,1!" C:\Documents and Settings\name>if !i! NEQ 3 goto:loop C:\Documents and Settings\name>set /a "i+=1", "j=7*26214/32767" C:\Documents and Settings\name>set "r=!r!!map:~5,1!" C:\Documents and Settings\name>if !i! NEQ 3 goto:loop C:\Documents and Settings\name>echo:1nh 1nh C:\Documents and Settings\name>endlocal gie'. |
Отправлено: 17:25, 01-04-2017 | #7 |
Забанен Сообщения: 793
|
Цитата neth1:
Цитата neth1:
Цитата neth1:
|
|||
Отправлено: 17:38, 01-04-2017 | #8 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать neth1, А в начале кода у Вас присутствует @Echo off? Иначе объяснить отображение команд на экране невозможно.
greg zakharov, Возможно, Вы частично правы, но я стремлюсь делать более обобщенные скрипты, у Вас же при изменении длины набора символов и длины случайного слова придётся перелопатить весь код. Мне показалось, что вариант с однократным для каждого символа определением *%random%/32767 часто даёт серию близких значений, возможно я неправ. И, наконец, в Вашем коде имхо логичнее применить For |
------- Последний раз редактировалось megaloman, 01-04-2017 в 18:19. Отправлено: 18:11, 01-04-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать neth1, может быть Вы озвучите Вашу глобальную цель — зачем это надо?
|
Отправлено: 18:53, 01-04-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Случайные зависания компьютера. | Nasitrap | Непонятные проблемы с Железом | 12 | 29-09-2015 09:39 | |
[решено] Случайные зависания компьютера | daniil98797 | Материнские платы и память | 9 | 03-11-2013 13:50 | |
Delphi - [решено] Случайные числа | Ruzik | Программирование и базы данных | 5 | 13-11-2008 08:22 | |
Разное - [решено] Как в список "Символы" добавить собственные символы для вставки в текст | T-IIIJ | Microsoft Windows 2000/XP | 4 | 23-02-2008 16:27 | |
Случайные числа на JavaScript | Dimonweb | Вебмастеру | 2 | 12-08-2004 03:23 |
|