Компьютерный форум 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=310119)

kokos76 08-01-2016 23:22 2592611

Разбить строку на две подстроки по последнему символу \
 
Имеется множество строк вида КОРЕНЬ_РАЗДЕЛА_РЕЕСТРА\название\подраздела\реестра\параметр_реестра разной длины, т.е. они содержат неодинаковое количество символов \ (получены экспортом из procmon). Помогите, пожалуйста, разбить каждую на две подстроки: КОРЕНЬ_РАЗДЕЛА_РЕЕСТРА\название\подраздела\реестра и параметр_реестра.

Цель - подать эти значения на вход cmd-скрипта, выполняющего экспорт конкретных параметров реестра от ув. 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


Georgio 09-01-2016 03:22 2592636

Код:

@echo off


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 :sub %%?
                )

goto :eof


:sub

 setlocal

 set "s=%~1"

 :sub_1
  for /f "tokens=1* delims=\" %%i in ("%s%") do set s=%%j& set t=%%i
  if defined s ((if defined x (set "x=%x%\%t%") else (set "x=%t%"))& goto %0_1) else (set "y=%t%")

 set "first_substring=%x%"
 set "second_substring=%y%"

 echo "%first_substring%"
 echo "%second_substring%"

 echo.
 pause
 echo.

 endlocal

 exit /b 0


kokos76 09-01-2016 09:32 2592661

Georgio, Вашу идею понял, спасибо большое!! Я в своей домашне-сисадминской практике с if defined ещё не сталкивался :-) .


Время: 22:00.

Время: 22:00.
© OSzone.net 2001-