kokos76
08-01-2016, 23:22
Имеется множество строк вида КОРЕНЬ_РАЗДЕЛА_РЕЕСТРА\название\подраздела\реестра\параметр_реестра разной длины, т.е. они содержат неодинаковое количество символов \ (получены экспортом из procmon). Помогите, пожалуйста, разбить каждую на две подстроки: КОРЕНЬ_РАЗДЕЛА_РЕЕСТРА\название\подраздела\реестра и параметр_реестра.
Цель - подать эти значения на вход cmd-скрипта, выполняющего экспорт конкретных параметров реестра (http://forum.oszone.net/post-1327492.html#post1327492) от ув. amel27. Если необходимо, массив исходных данных можно вынести в отдельный txt-файл. Дошёл до такого этапа и всё, большего моё гуманитарное образование не позволяет:
@Echo Off
if not exist "c:\backup\reg" mkdir c:\backup\reg
set count=1
for %%? in (
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Fax\ChangeID"
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports\nul:"
"HKU\S-1-5-19\Software\Microsoft\Windows NT\CurrentVersion\Devices\Отправить в OneNote 2010"
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Отправить в OneNote 2010\ChangeID"
) do call:reg_exp %%?
)
goto :end
:reg_exp
Set $R_REG=здесь_должно_быть_название_подраздела_реестра_из_переданной_в_функцию_строки
Set $R_VAL=здесь_должно_быть_название_параметра_реестра_из_переданной_в_функцию_строки
Set $R_TMP=HKEY_CURRENT_USER\Temp
Set $F_REG=c:\backup\reg\%count%.reg
Set $F_TMP=c:\backup\reg\%count%.tmp
Set $N=1
For %%i In (%$R_VAL%) Do Set /A $N+=1
Reg Delete "%$R_TMP%" /f >Nul 2>&1
If Exist "%$F_TMP%" DEL /F/Q "%$F_TMP%"
If Exist "%$F_REG%" DEL /F/Q "%$F_REG%"
For /F "Tokens=%$N%* Delims= " %%i In (
'REG Query "%$R_REG%" /v "%$R_VAL%"^|FindStr /IBRC:"[ ]*%$R_VAL%[ ][ ]*REG_"'
) Do REG ADD "%$R_TMP%" /v "%$R_VAL%" /t %%i /f /d "%%j" >Nul
RegEdit /E:A "%$F_TMP%" "%$R_TMP%"
For /F "Delims=:" %%i In ('FindStr /BNC:^"[^" "%$F_TMP%"') Do Set $M=%%i
For /F "Tokens=1* Delims=:" %%i In ('FindStr /BVNC:^"]^" "%$F_TMP%"') Do (
If %%i EQU %$M% (
Echo.[%$R_REG%]>>%$F_REG%
) ELSE (
Echo.%%j>>%$F_REG%
)
)
set /a count=count+1
exit /b
:end
Цель - подать эти значения на вход cmd-скрипта, выполняющего экспорт конкретных параметров реестра (http://forum.oszone.net/post-1327492.html#post1327492) от ув. amel27. Если необходимо, массив исходных данных можно вынести в отдельный txt-файл. Дошёл до такого этапа и всё, большего моё гуманитарное образование не позволяет:
@Echo Off
if not exist "c:\backup\reg" mkdir c:\backup\reg
set count=1
for %%? in (
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Fax\ChangeID"
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports\nul:"
"HKU\S-1-5-19\Software\Microsoft\Windows NT\CurrentVersion\Devices\Отправить в OneNote 2010"
"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Отправить в OneNote 2010\ChangeID"
) do call:reg_exp %%?
)
goto :end
:reg_exp
Set $R_REG=здесь_должно_быть_название_подраздела_реестра_из_переданной_в_функцию_строки
Set $R_VAL=здесь_должно_быть_название_параметра_реестра_из_переданной_в_функцию_строки
Set $R_TMP=HKEY_CURRENT_USER\Temp
Set $F_REG=c:\backup\reg\%count%.reg
Set $F_TMP=c:\backup\reg\%count%.tmp
Set $N=1
For %%i In (%$R_VAL%) Do Set /A $N+=1
Reg Delete "%$R_TMP%" /f >Nul 2>&1
If Exist "%$F_TMP%" DEL /F/Q "%$F_TMP%"
If Exist "%$F_REG%" DEL /F/Q "%$F_REG%"
For /F "Tokens=%$N%* Delims= " %%i In (
'REG Query "%$R_REG%" /v "%$R_VAL%"^|FindStr /IBRC:"[ ]*%$R_VAL%[ ][ ]*REG_"'
) Do REG ADD "%$R_TMP%" /v "%$R_VAL%" /t %%i /f /d "%%j" >Nul
RegEdit /E:A "%$F_TMP%" "%$R_TMP%"
For /F "Delims=:" %%i In ('FindStr /BNC:^"[^" "%$F_TMP%"') Do Set $M=%%i
For /F "Tokens=1* Delims=:" %%i In ('FindStr /BVNC:^"]^" "%$F_TMP%"') Do (
If %%i EQU %$M% (
Echo.[%$R_REG%]>>%$F_REG%
) ELSE (
Echo.%%j>>%$F_REG%
)
)
set /a count=count+1
exit /b
:end