Поиск строки в файле и замена её на набор из случайных чисел и букв
Нужен bat'ник делающий следующее.
Есть текстовый файл - в нем есть строка вида: Name = "Василий"
Нужно найти эту строку и поменять чтобы получилось: Name = "8n29a9h3z5"
При этом 8n29a9h3z5 при каждом запуске bat файла должно формироваться случайным образом из букв и цифр и иметь разную длину - от 10 до 15 символов.
Вариант с постоянным количеством случайных символов - 15 тоже подойдет.
|
Код:
@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%"
|
Код:
@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
|
Вложений: 1
Спасибо за ответы! Но...ни первый скрипт - он просто обнулял исходный файл ни второй - он удалял все содержимое и вносил туда кучу символов с задачей не справились.
Есть подозрение что вся причина в кодировке файла UCS-2. В то время как скриптам надо 1251.
Шлю файл который нужно обработать. Нужно заменить в строке NewAdministratorName = "Администратор" на NewAdministratorName = "15 случайных символов (букв и цифр)"
|
Вложений: 1
Не мешало бы в задаче упомянуть, что Ваш текстовый файл в кодировке UTF16-LE, с которой батники не работают!
Читайте, что у меня написано:
Цитата:
Цитата gora
:: Батник и исходный файл в кодировке кириллица Windows (1251) »
|
PS
Прикрепил работающий комплект.
|
Код:
@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
P.S. кодировка самого батника WIN 1251
|
gora и amel27 - спасибо огромное! Все работает!
|
Время: 12:29.
© OSzone.net 2001-