Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск строки в файле и замена её на набор из случайных чисел и букв (http://forum.oszone.net/showthread.php?t=198866)

Sub-Zero 08-02-2011 00:40 1607272

Поиск строки в файле и замена её на набор из случайных чисел и букв
 
Нужен bat'ник делающий следующее.
Есть текстовый файл - в нем есть строка вида: Name = "Василий"
Нужно найти эту строку и поменять чтобы получилось: Name = "8n29a9h3z5"
При этом 8n29a9h3z5 при каждом запуске bat файла должно формироваться случайным образом из букв и цифр и иметь разную длину - от 10 до 15 символов.
Вариант с постоянным количеством случайных символов - 15 тоже подойдет.

gora 08-02-2011 08:45 1607394

Код:

@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%"


amel27 08-02-2011 12:18 1607531

Код:

@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


Sub-Zero 08-02-2011 13:25 1607563

Вложений: 1
Спасибо за ответы! Но...ни первый скрипт - он просто обнулял исходный файл ни второй - он удалял все содержимое и вносил туда кучу символов с задачей не справились.
Есть подозрение что вся причина в кодировке файла UCS-2. В то время как скриптам надо 1251.
Шлю файл который нужно обработать. Нужно заменить в строке NewAdministratorName = "Администратор" на NewAdministratorName = "15 случайных символов (букв и цифр)"

gora 08-02-2011 13:49 1607574

Вложений: 1
Цитата:

Цитата Sub-Zero
задачей не справились. »

Не мешало бы в задаче упомянуть, что Ваш текстовый файл в кодировке UTF16-LE, с которой батники не работают!
Читайте, что у меня написано:
Цитата:

Цитата gora
:: Батник и исходный файл в кодировке кириллица Windows (1251) »

PS
Прикрепил работающий комплект.

amel27 08-02-2011 15:56 1607659

Код:

@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

Sub-Zero 08-02-2011 18:54 1607793

gora и amel27 - спасибо огромное! Все работает!


Время: 12:29.

Время: 12:29.
© OSzone.net 2001-