|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск строки в файле и замена её на набор из случайных чисел и букв |
|
CMD/BAT - [решено] Поиск строки в файле и замена её на набор из случайных чисел и букв
|
Старожил Сообщения: 153 |
Профиль | Сайт | Отправить PM | Цитировать
Нужен bat'ник делающий следующее.
Есть текстовый файл - в нем есть строка вида: Name = "Василий" Нужно найти эту строку и поменять чтобы получилось: Name = "8n29a9h3z5" При этом 8n29a9h3z5 при каждом запуске bat файла должно формироваться случайным образом из букв и цифр и иметь разную длину - от 10 до 15 символов. Вариант с постоянным количеством случайных символов - 15 тоже подойдет. |
|
Отправлено: 00:40, 08-02-2011 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать @Echo Off SetLocal enabledelayedexpansion :: Батник и исходный файл в кодировке кириллица Windows (1251) :: Исходный файл Set file=list name.txt :: Число символов в новом имени Set I=15 Set N=62& Set CHAR=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWQYZ For /L %%a In (1,1,%I%) Do Set /a R=N*!random!/32768& Call Set PW=%%CHAR:~!R!,1%%!PW! ( For /F "usebackq tokens=* delims=" %%i In ("%file%") Do If "%%i"=="Name = "Василий"" (Echo Name = "%PW%") Else Echo %%i )>"%file%t" Del "%file%" Ren "%file%t" "%file%" |
Отправлено: 08:45, 08-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать @echo off call:Rnd36Str 10 RND call:SetParm sec.txt NewAdministratorName "%RND:~-15%" EXIT /b :SetParm %file% %parm% %val% ::-------------------------- SETLOCAL DisableDelayedExpansion set $TMP=%TEMP%\%RANDOM%%RANDOM%.tmp (for /f "tokens=* delims=01234567890" %%a in ('type "%~1"^|findstr /n "^"') do ( set "$a=%%a"& SETLOCAL EnableDelayedExpansion for /f "tokens=1 delims== " %%b in ("!$a:~1!") do if /i "%%b"=="%~2" set "$a=:%~2 = %3" echo(!$a:~1! ENDLOCAL ))>"%$TMP%" copy "%$TMP%" "%~1">nul&& del "%$TMP%" ENDLOCAL& EXIT /b :Rnd36Str %cnt% %var% ::------------------- SETLOCAL EnableDelayedExpansion& set "str=" set "map=;0-0;1-1;2-2;3-3;4-4;5-5;6-6;7-7;8-8;9-9;10-a;11-b;12-c;13-d;14-e;15-f;16-g;17-h;18-i;19-j;20-k;21-l;22-m;23-n;24-o;25-p;26-q;27-r;28-s;29-t;30-u;31-v;32-w;33-x;34-y;35-z" for /L %%L in (1,1,%~1) do (set /a dec=!RANDOM! for /L %%N in (1,1,6) do if !dec! gtr 0 ( set /a "d=dec%%36,dec/=36" call set h=%%map:*;!d!-=%% set str=!h:~0,1!!str! )) ENDLOCAL& set "%~2=%str%"& EXIT /b |
Последний раз редактировалось amel27, 08-02-2011 в 15:50. Отправлено: 12:18, 08-02-2011 | #3 |
Старожил Сообщения: 153
|
Профиль | Сайт | Отправить PM | Цитировать Спасибо за ответы! Но...ни первый скрипт - он просто обнулял исходный файл ни второй - он удалял все содержимое и вносил туда кучу символов с задачей не справились.
Есть подозрение что вся причина в кодировке файла UCS-2. В то время как скриптам надо 1251. Шлю файл который нужно обработать. Нужно заменить в строке NewAdministratorName = "Администратор" на NewAdministratorName = "15 случайных символов (букв и цифр)" |
Последний раз редактировалось Sub-Zero, 08-02-2011 в 13:48. Отправлено: 13:25, 08-02-2011 | #4 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать |
|
Последний раз редактировалось gora, 08-02-2011 в 14:53. Отправлено: 13:49, 08-02-2011 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать @echo off call:Rnd36Str 10 RND call:SetParm sec.txt NewAdministratorName "%RND:~-15%" call:OEM2UTF sec.txt EXIT /b :OEM2UTF %file% ::------------- SETLOCAL& set $TMP=%TEMP%\%RANDOM%%RANDOM%.tmp <nul >"%$TMP%" set /P $$=яю cmd /u/c type "%~1" >>"%$TMP%" copy "%$TMP%" "%~1">nul&& del "%$TMP%" ENDLOCAL& EXIT /b :SetParm %file% %parm% %val% ::-------------------------- SETLOCAL DisableDelayedExpansion set $TMP=%TEMP%\%RANDOM%%RANDOM%.tmp (for /f "tokens=* delims=01234567890" %%a in ('type "%~1"^|findstr /n "^"') do ( set "$a=%%a"& SETLOCAL EnableDelayedExpansion for /f "tokens=1 delims== " %%b in ("!$a:~1!") do if /i "%%b"=="%~2" set "$a=:%~2 = %3" echo(!$a:~1! ENDLOCAL ))>"%$TMP%" copy "%$TMP%" "%~1">nul&& del "%$TMP%" ENDLOCAL& EXIT /b :Rnd36Str %cnt% %var% ::------------------- SETLOCAL EnableDelayedExpansion& set "str=" set "map=;0-0;1-1;2-2;3-3;4-4;5-5;6-6;7-7;8-8;9-9;10-a;11-b;12-c;13-d;14-e;15-f;16-g;17-h;18-i;19-j;20-k;21-l;22-m;23-n;24-o;25-p;26-q;27-r;28-s;29-t;30-u;31-v;32-w;33-x;34-y;35-z" for /L %%L in (1,1,%~1) do (set /a dec=!RANDOM! for /L %%N in (1,1,6) do if !dec! gtr 0 ( set /a "d=dec%%36,dec/=36" call set h=%%map:*;!d!-=%% set str=!h:~0,1!!str! )) ENDLOCAL& set "%~2=%str%"& EXIT /b |
Отправлено: 15:56, 08-02-2011 | #6 |
Старожил Сообщения: 153
|
Профиль | Сайт | Отправить PM | Цитировать gora и amel27 - спасибо огромное! Все работает!
|
Отправлено: 18:54, 08-02-2011 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Подсчет количества целых чисел в текстовом файле | Hardip | Скриптовые языки администрирования Windows | 5 | 08-12-2010 14:49 | |
CMD/BAT - [решено] Поиск чисел внутри файла | Hardip | Скриптовые языки администрирования Windows | 5 | 19-11-2010 15:20 | |
C/C++ - Как правильно задать диапазон генерации случайных чисел | perfomanse | Программирование и базы данных | 6 | 03-07-2010 22:10 | |
[решено] поиск строки в WORD файле.... | garanov | AutoIt | 3 | 19-03-2010 09:16 | |
Генератор случайных чисел | Murrey | Хочу все знать | 3 | 22-08-2006 13:00 |
|