Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Fhnbcn
0 / 0 / 0
Регистрация: 08.02.2015
Сообщений: 10
1

Bat - случайная запись в реестре

11.01.2019, 12:36. Просмотров 1040. Ответов 26

Здравствуйте. Подскажите, пожалуйста, кто знает.
Вот, к примеру, мне нужно добавить в реестр следующее:

Код
[HKEY_LOCAL_MACHINE\SOFTWARE\Prog gor\gor]
"ogo"="1q2w3e4r5t6y7u8i9o0p1q2w3e4r5t6y"
Помогите, пожалуйста. Нужен батник, чтобы при его применении записывалось значение не "1q2w3e4r5t6y7u8i9o0p1q2w3e4r5t6y" , а любое случайное с цифр и букв в любом порядке, одинаковое количество цифр и букв значения не имеют.
Возможно ли, вообще сделать такой батник?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2019, 12:36
Ответы с готовыми решениями:

BAT-файл или запись в реестре для перехода компьютера в режим сна через 3600 секунд
нужно создать BAT файл или запись в реестре (что намного желательней) чтобы компьютер переходил в...

Запись команд из одного bat-файла в другой bat-файл
Предположил что: в 1 bat: echo echo my_text >> my_file >> new.bat и хотел что бы получилось так...

Как изменить 16-ное REG_BINARY значение в реестре через bat-файл?
Приветствую. Есть такой .reg файл, который меняет ...

Пропадает запись в реестре
в bat файле написано reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v 123 /t REG_SZ...

Как создать/изменить запись в реестре?
Вот например сейчас эта запись уже есть: Путь: Имя: Значение: Как создать эту запись...

26
YuS_2
Любознательный
1050 / 590 / 186
Регистрация: 10.03.2016
Сообщений: 1,346
11.01.2019, 13:32 2
Цитата Сообщение от Fhnbcn Посмотреть сообщение
Возможно ли, вообще сделать такой батник?
Ну, а чего же невозможно? Можно...

Windows Batch file
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
@echo off
rem Псевдорандом - вывод n-разрядного числа в m знаков
rem Нет ограничений рандома cmd в 32768
rem примеры запуска:
rem run.bat "10" "10"
rem run.bat 10 0xF
rem run.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%
pause
- запись в реестр добавьте самостоятельно...

Символы, используемые в выводе, тоже можно подправить под задачу...
1
eva2326
229 / 65 / 18
Регистрация: 17.05.2015
Сообщений: 292
11.01.2019, 13:35 3
Цитата Сообщение от Fhnbcn Посмотреть сообщение
не "1q2w3e4r5t6y7u8i9o0p1q2w3e4r5t6y" , а любое случайное с цифр и букв в любом порядке

следующий батник формирует последовательность случайных цифр или букв:


Windows Batch file
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
@echo off
setlocal enabledelayedexpansion
cls
 
@echo.
@echo.
 
rem 1q2w3e4r5t6y7u8i9o0p1q2w3e4r5t6y
call :randomizeSequence 32 sequence
@echo sequence = '%sequence%'
exit /b
 
rem =========================================================================
rem =========================================================================
 
:randomize
    set MIN=%1
    set MAX=%2
    set /A %3=%MIN% + (%MAX% - %MIN% + 1) * %random% / 32768
exit /b
 
:fillArray
    set "array[!cnt!]=%~1"
    set /a cnt +=1
exit /b
 
:initialRandomize
    if defined ALREADYINIT (exit /b)
    set ALREADYINIT=true
    rem         00 01 02 03 04 05 06 07 08 09 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 
    for %%a in ( a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  0  1  2  3  4  5  6  7  8  9) do (
        call :fillArray %%a  
    )
exit /b
 
:accumulate
    call :randomize 0 35 index
    call set char=%%array[%index%]%%
    call set "%dst%=%%%dst%%%%char%"    
exit /b
 
:randomizeSequence
    set len=%1
    set dst=%2
    call :initialRandomize
    for /L %%a in (1 1 %len%) do (
        call :accumulate %%a
    )
exit /b
 
rem =========================================================================
rem =========================================================================
Есть проблема: работает медленно.
1
KDE777
1180 / 707 / 292
Регистрация: 22.01.2016
Сообщений: 2,012
11.01.2019, 14:04 4
Цитата Сообщение от Fhnbcn Посмотреть сообщение
Нужен батник, чтобы при его применении записывалось значение не "1q2w3e4r5t6y7u8i9o0p1q2w3e4r5t6y" , а любое случайное с цифр и букв в любом порядке, одинаковое количество цифр и букв значения не имеют.
Возможно ли, вообще сделать такой батник?
Примеры на cmd вам уже показали, а вот PowerShell вариант:

PowerShell
1
New-ItemProperty -Path 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Prog gor\gor' -Name 'ogo' -Value (-join ((65..90)+(97..122)+(48..57) | Get-Random -Count 32 | % {[char]$_})) -Force
1
Fhnbcn
0 / 0 / 0
Регистрация: 08.02.2015
Сообщений: 10
11.01.2019, 15:07  [ТС] 5
Огромное спасибо, что так быстро и много ответили.
Я так понял, что это все какие то генераторы.
Ума не приложу как их прикрутить, к примеру к этому конкретному батнику:
Windows Batch file
1
2
3
4
5
@echo off
 
REG ADD HKLM\Software\Prog /v Gorp /t REG_SZ /d 00000000000000000000000000000000 /f
 
exit /b
чтобы вместо тридцати двух нулей в реестре прописывались цифры и буквы в любой, каждый раз разной последовательности.
0
KDE777
1180 / 707 / 292
Регистрация: 22.01.2016
Сообщений: 2,012
11.01.2019, 15:14 6
Цитата Сообщение от Fhnbcn Посмотреть сообщение
Я так понял, что это все какие то генераторы.
Пример на PowerShell генерирует 32-х символьную, случайную последовательность латинских букв (в разном регистре) и цифр, а также записывает это в реестр.

Можете сами проверить - запускаете powershell.exe (от Администратора) и вставляете строчку из ответа #4
0
eva2326
229 / 65 / 18
Регистрация: 17.05.2015
Сообщений: 292
11.01.2019, 16:05 7
Лучший ответ Сообщение было отмечено Fhnbcn как решение

Решение

Цитата Сообщение от Fhnbcn Посмотреть сообщение
Ума не приложу как их прикрутить, к примеру к этому конкретному батнику:
Сделает где-то примерно за 1-1.5 секунды:

Windows Batch file
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
@echo off
cls
 
@echo.
@echo.
 
call :randomizeSequence 32 sequence
@echo sequence = '%sequence%'
 
REG ADD HKLM\Software\Prog /v Gorp /t REG_SZ /d %sequence% /f
 
exit /b
 
rem =========================================================================
rem =========================================================================
 
:randomize
    set MIN=%1
    set MAX=%2
    set /A %3=%MIN% + (%MAX% - %MIN% + 1) * %random% / 32768
exit /b
 
:fillArray
    set "array[%cnt%]=%1"
    set /a cnt +=1
exit /b
 
:initialRandomize
    if defined ALREADYINIT (exit /b)
    set ALREADYINIT=true
    rem         00 01 02 03 04 05 06 07 08 09 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 
    for %%a in ( a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  0  1  2  3  4  5  6  7  8  9) do (
        call :fillArray %%a  
    )
exit /b
 
:accumulate
    call :randomize 0 35 index
    call set "char=%%array[%index%]%%"
    call set "%dst%=%%%dst%%%%char%"    
exit /b
 
:randomizeSequence
    set len=%1
    set dst=%2
    call :initialRandomize
    for /L %%a in (1 1 %len%) do (
        call :accumulate %%a
    )
exit /b
 
rem =========================================================================
rem =========================================================================
1
greg zakharov
Покинул форум
2143 / 866 / 247
Регистрация: 07.05.2015
Сообщений: 1,718
11.01.2019, 16:39 8
Цитата Сообщение от KDE777
...(-join ((65..90)+(97..122)+(48..57) | Get-Random -Count 32...
Проще (без выделения памяти под массивы с последующей передачей данных по конвейеру):
PowerShell
1
([Guid]::NewGuid()).Guid.Replace('-', '')
YuS_2, eva2326 генератор можно сделать значительно проще и наглядней:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0</* :
@echo off
  setlocal
    for /f %%i in ('cscript /nologo /e:jscript "%~f0"') do (
      set "rnd=%%i" % rem :захватили случайное значение
    )
    rem можно просто отобразить это значение
    echo:%rnd%
  endlocal
exit /b*/
 
(function() {
  WScript.echo((
      new ActiveXObject('Scriptlet.TypeLib')
    ).Guid.toLowerCase().replace(/[-\{\}]/g, '')
  );
})();
В сущности здесь также генерируется GUID, из которого после затираются лишние знаки ('-' и фигурные скобки).
Есть и прочие варианты.
2
volodin661
2070 / 952 / 157
Регистрация: 10.12.2013
Сообщений: 3,174
11.01.2019, 16:50 9
Windows Batch file
1
2
3
4
@    PERL6 -e ('а'...'z',0...9).roll(32).join.say >seq
@    SET /P seq=<seq
@    REG ADD HKLM\Software\Prog /v Gorp /t REG_SZ /d %seq% /f
@    DEL seq
1
KDE777
1180 / 707 / 292
Регистрация: 22.01.2016
Сообщений: 2,012
11.01.2019, 16:58 10
Цитата Сообщение от greg zakharov Посмотреть сообщение
([Guid]::NewGuid()).Guid
Тоже вариант, но если устраивает, что будет фиксированная длинна и только строчные a-f буквы + цифры...
0
YuS_2
Любознательный
1050 / 590 / 186
Регистрация: 10.03.2016
Сообщений: 1,346
11.01.2019, 17:48 11
Цитата Сообщение от greg zakharov Посмотреть сообщение
генератор можно сделать значительно проще и наглядней
с привлечением не "чисто" cmd средств, конечно, можно и проще, и нагляднее, с этим спорить бессмысленно... и даже вредно.
0
eva2326
229 / 65 / 18
Регистрация: 17.05.2015
Сообщений: 292
11.01.2019, 18:38 12
Цитата Сообщение от greg zakharov Посмотреть сообщение
генератор можно сделать значительно проще и наглядней:
не понятно, что происходит в этих строчках:

Цитата Сообщение от greg zakharov Посмотреть сообщение
0</* :
Цитата Сообщение от greg zakharov Посмотреть сообщение
exit /b*/
0
volodin661
2070 / 952 / 157
Регистрация: 10.12.2013
Сообщений: 3,174
11.01.2019, 19:03 13
Цитата Сообщение от eva2326 Посмотреть сообщение
не понятно, что происходит в этих строчках:
это гибрид помидора(jscript) и картофеля(cmd), названный Путь к социализму, сокращённо ПУКС

Командные сценарии-гибриды
0
Fhnbcn
0 / 0 / 0
Регистрация: 08.02.2015
Сообщений: 10
11.01.2019, 19:16  [ТС] 14
eva2326, это именно то, что я хотел. На моем компе вносит данные менее секунды.
Огромнейшее спасибо всем, принявшим участия в моей проблеме.
0
YuS_2
11.01.2019, 19:43
  #15

Не по теме:

Цитата Сообщение от eva2326 Посмотреть сообщение
не понятно, что происходит в этих строчках:
как правильно заметили выше, это гибрид, запускающий сам себя и многострочная часть кода, относящаяся к cmd, скрывается от сервера сценариев между символами /* */, т.е. для cscript.exe это будет обычным комментарием.

0
eva2326
229 / 65 / 18
Регистрация: 17.05.2015
Сообщений: 292
11.01.2019, 20:19 16
Цитата Сообщение от volodin661 Посмотреть сообщение
это гибрид
То, что это гибрид - это итак понятно ))

Я читала ветку про гибриды.
Проблема в том, что там нет описания принципов их построения.
А без понимания синтаксиса и логики происходящего код для меня бесполезен.
Я предпочту пусть более многословное, но понятное решение,
чем какие то непонятные закорючки непонятно что и как делающие.

Цитата Сообщение от YuS_2 Посмотреть сообщение
многострочная часть кода, относящаяся к cmd, скрывается от сервера сценариев между символами /* */,
Я догадалась, что символы /* */ образовали
многострочный комментарий на языке вижуал бейсик скрипт.


Это было не сложно.
Смотрите:
Windows Batch file
1
            for /f %%i in ('cscript /nologo /e:jscript "%~f0"') do (
Запуск интерпретатора вижул-бейсик-скриптов.
В качестве исходного текста передаётся батник.
Следовательно все содержимое батника - это теперь скрипт на бейсике.


мне не понятно, как батник (то есть интерпретатор батника cmd)
обрабатывает эти строки:
Цитата Сообщение от greg zakharov Посмотреть сообщение
0</* :
Цитата Сообщение от eva2326 Посмотреть сообщение
exit /b*/
Ещё, не понятно, что на вижул-бейсик-скрипте означает строчка:
Цитата Сообщение от greg zakharov Посмотреть сообщение
0</* :
как vbs воспримет первые два символа: 0<

Добавлено через 9 минут
Ошиблась: это не вижул бейсик скрипт.
Это - джейсон скрипт.

Эта штука: cscript умеет запускать и такие, и такие.
параметр /e:jscript обозначил использовать jscript.
0
FlasherX
828 / 368 / 133
Регистрация: 06.06.2017
Сообщений: 1,336
11.01.2019, 20:32 17
Цитата Сообщение от Fhnbcn Посмотреть сообщение
На моем компе вносит данные менее секунды.
Если нужна скорость, логично взять код на чистом js/vbs. Гибрид тут не нужен.

Цитата Сообщение от eva2326 Посмотреть сообщение
Это - джейсон скрипт.
Почитайте, что такое JSON, прежде чем эрративами бросаться.
1
YuS_2
Любознательный
1050 / 590 / 186
Регистрация: 10.03.2016
Сообщений: 1,346
11.01.2019, 21:22 18
Цитата Сообщение от eva2326 Посмотреть сообщение
мне не понятно, как батник (то есть интерпретатор батника cmd)
обрабатывает эти строки:
Да, в общем, как пустую команду... это можно проверить экспериментально, создав и запустив батник из таких команд:
Windows Batch file
1
2
3
echo.a
0</* :
echo.b
или так:
Windows Batch file
1
2
3
echo.a
0</* rem
echo.b
а exit /b*/, для интерпретатора, просто "мягкий" выход...

Цитата Сообщение от eva2326 Посмотреть сообщение
как vbs воспримет первые два символа: 0<
опять же, экспериментом можно все проверить...
test.js
Javascript
1
2
3
4
0< /*
nnnnn
*/
WScript.Echo("Поздравления!")
1
greg zakharov
Покинул форум
2143 / 866 / 247
Регистрация: 07.05.2015
Сообщений: 1,718
12.01.2019, 18:51 19
Цитата Сообщение от KDE777
...что будет фиксированная длинна...
Желаете сказать, что с Get-Random можно генерировать строку произвольной длинны?
Цитата Сообщение от volodin661
...PERL6 -e ('а'...'z',0...9).roll(32).join.say...
В pwsh, кстати, подобный синтаксис:
PowerShell
1
-join('a'..'z'+0..9|Get-Random -Count 32)
Правда из-за ограниченности Get-Random лучше использовать Linq, нечто вроде:
PowerShell
1
2
$r = [Random]::new()
-join[Linq.Enumerable]::OrderBy('a'..'z'+0..9, [Func[Object, Object]]{$r.Next()})
Задать длину конечной строки можно, скажем, через Range, в то время как Get-Random упорно не желает брать диапазон более ~37 символов (баг\фича?! ковыряться в исходниках не хоцца).
Цитата Сообщение от YuS_2
с привлечением не "чисто" cmd средств, конечно, можно и проще, и нагляднее, с этим спорить бессмысленно...
Не совсем, скорее все зависит от версии ОСи, ведь в каждой последующей (если вести летопись от иконостасной ХР) есть свои плюхи в виде консольных утилит, и тем же curl, что с некоторых пор поставляется с десяткой, можно конвертировать строки в base64 (хотя это к теме по сути и не относится), - есть над чем подумать, подискутировать.
Цитата Сообщение от eva2326
не понятно, что происходит в этих строчках
Хотя вам уже итак все детально объяснили, от себя добавлю, что "проектирование" гибрида основывается на багах (или просто особенностях) синтаксиса командного интерпретатора как такового.
3
YuS_2
Любознательный
1050 / 590 / 186
Регистрация: 10.03.2016
Сообщений: 1,346
12.01.2019, 22:33 20
Цитата Сообщение от greg zakharov Посмотреть сообщение
есть над чем подумать, подискутировать.
Подумать - это зарядка для ума, тут согласен, а вот на счет подискутировать, по вопросу сравнения возможностей чистого cmd и привлекаемых внешних средств ПО... результат дискуссии, вряд ли будет в пользу cmd... к бабке не ходи

Цитата Сообщение от greg zakharov Посмотреть сообщение
Get-Random упорно не желает брать диапазон более ~37 символов
Что-то не совсем понял... пример бы, что за баг там?
0
12.01.2019, 22:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2019, 22:33

Как в bat-файле реализовать запись слова без кавычек?
Есть спецы по батникам? нужна помощь. Допустим у меня есть перенная %my% содержащая слово в...

Запись в определённый файл нескольких заданных строк из выводимого в результате выполнения bat-файла текста
Здравствуйте буду благодарен если поможете Есть бат файл после его запуска на экран выходит...

Запуск файла в директории с .bat, когда .bat запущен от имени администратора
Здравствуйте. Имею бат, он должен запускать файл &quot;&lt;тут директория батника&gt;\n1.bat&quot;. Но если даже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru