Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить строку на две подстроки по последнему символу \

Ответить
Настройки темы
CMD/BAT - Разбить строку на две подстроки по последнему символу \

Новый участник


Сообщения: 48
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: kokos76
Дата: 10-01-2016
Описание: ссылку поправил
Имеется множество строк вида КОРЕНЬ_РАЗДЕЛА_РЕЕСТРА\название\подраздела\реестра\параметр_реестра разной длины, т.е. они содержат неодинаковое количество символов \ (получены экспортом из 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

Отправлено: 23:22, 08-01-2016

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:22, 09-01-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 48
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 09:32, 09-01-2016 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разбить строку на две подстроки по последнему символу \

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Как разбить одну строку на много строк KooDI Скриптовые языки администрирования Windows 56 06-08-2013 23:26
Установка - Разбить хард на две части после установки системы twinzzz75 Microsoft Windows 2000/XP 12 09-03-2013 07:41
CMD/BAT - [решено] Как построчно разбить текстовый файл на текстовые файлы содержащие одну строку binwatch@vk Скриптовые языки администрирования Windows 3 09-09-2012 19:59
Медиа - Как разбить фильм на две части. verdix Видео и аудио: обработка и кодирование 18 02-07-2008 23:58
разбить строку khvalera Программирование и базы данных 1 06-05-2004 12:48




 
Переход