中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]用系统SID值替换注册表SID值
作者:
标题: [求助]用系统SID值替换注册表SID值 上一主题 | 下一主题
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『楼 主』:  [求助]用系统SID值替换注册表SID值

我导出了一个注册表文件,以便我重装系统后快速恢复设置。可重装系统后,系统的SID值发生变化。我想从系统中获取SID值,再替换已经导出的注册表文件。
SID值即注册表中“HKEY_USERS\S-1-5-21-××××××××××-××××××××××-××××××××××-×××\”中的红色部分。

比如我导出的注册表文件为Win.reg,部份内容为:

Windows Registry Editor Version 5.00
;    2008-9-12 22:20:22


[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Windows\CurrentVersion\Explorer]
"ShellState"=hex(03):24,00,00,00,35,ac,01,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,01,00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00


[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Windows\CurrentVersion\Explorer\SmallIcons]
"SmallIcons"="no"
[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams]
"Settings"=hex(03):08,00,00,00,04,00,00,00,01,00,00,00,00,77,7e,13,73,35,cf,\
  11,ae,69,08,00,2b,2e,12,62,04,00,00,00,01,00,00,00,43,00,00,00


我现在就是想编一个批处理,用系统中获取的SID值替换此注册表文件中的SID值(红色部分),然后导入系统。求高手帮忙。

[ Last edited by hgx126 on 2008-9-13 at 12:37 AM ]

2008-9-13 00:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 2 楼』:  


@set SID=S-1-5-21-1409082233-1563985344-1417001333-500
@set reg=win.reg
@set SID2=0-0-0-0-0-0-0-0
@set reg2=win2.reg
@for /f "delims=" %%a in (%reg%) do @set s=%%a&call echo %%s:%SID%=%SID2%%%>>%reg2%


2008-9-13 01:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 3 楼』:  

首先感谢S11SS.
不过我要是SID2从系统中获取,不是0-0-0-0-0-0-0-0.还求帮忙.

2008-9-13 09:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  Re 3楼


@echo off
for /f "tokens=2 delims=\" %%a in ('reg query HKEY_USERS^|findstr /i "S-1-5-21-"') do (
  set sid=%%a
  goto :show
)
goto :eof
:show
echo 你的sid是:%sid%




2008-9-13 10:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 5 楼』:  

谢谢两位。
我综合两位的,结果如下:
@echo off
@set SID=S-1-5-21-1409082233-1563985344-1417001333-500
@set reg=win.reg
@for /f "tokens=2 delims=\" %%a in ('reg query HKEY_USERS^|findstr /i "S-1-5-21-"') do (
  set sid2=%%a
  goto :show
  )
goto :eof
:show
set reg2=win2.reg
@for /f "delims=" %%a in (%reg%) do @set s=%%a&call echo %%s:%SID%=%SID2%%%>>%reg2%
regedit /s win2.reg
del win2.reg

终于达到我要的效果。
我还有一个想法(不要嫌我太婆婆妈妈哈^-^):
同一目录下,有好几个注册表文件,类似于win.reg,其中也有SID值(S-1-5-21-1409082233-1563985344-1417001333-500),想批量替换成系统中的SID值后导入注册表,能否?

2008-9-13 13:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  


@echo off
set SID=S-1-5-21-1409082233-1563985344-1417001333-500
for /f "tokens=2 delims=\" %%a in ('reg query HKEY_USERS^|findstr /i "S-1-5-21-"') do (
  set sid2=%%a
  goto :show
)
goto :eof
:show
for %%a in (*.reg) do (
  for /f "delims=" %%b in (%%a) do (
    set s=%%b
    call echo %%s:%SID%=%SID2%%%>>%%~na2.reg
  )
  regedit /s %%~na2.reg
  del %%~na2.reg
)




2008-9-13 14:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 7 楼』:  

衷心感谢,学习ing!!!

[ Last edited by hgx126 on 2008-9-16 at 11:07 PM ]

2008-9-13 15:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 8 楼』:  

不知为什么,用我5楼的批处理有时候又替换不成功?

[ Last edited by hgx126 on 2008-9-16 at 11:10 PM ]

2008-9-16 23:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  

哪个时候替换不成功?举个例子出来看看?



2008-9-16 23:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 10 楼』:  

Windows Registry Editor Version 5.00
;    2006-1-11 19:07:50  -  2006-1-11 19:13:27
;比较于   \HKEY_USERS



[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Printers\DevModePerUser]
[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Office\11.0\Common\BaseSuite]
"1EBDE4BC9A514630B5412561FA45CCC5"=dword:00000001

[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Office\11.0\Common\DrawAlerts]
[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Office\11.0\Common\DrawAlerts\FTP Sites]
[HKEY_USERS\S-1-5-21-1409082233-1563985344-1417001333-500\Software\Microsoft\Office\11.0\Common\Internet]
"UseOnlineContent"=dword:00000002

2008-9-16 23:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  


@echo off
set SID=S-1-5-21-1409082233-1563985344-1417001333-500
set reg=win.reg
for /f "tokens=2 delims=\" %%a in ('reg query HKEY_USERS^|findstr /i "S-1-5-21-"') do (
  set sid2=%%a
  goto :show
)
goto :eof
:show
set reg2=win2.reg
for /f "delims=" %%a in ('type "%reg%"') do (
  set s=%%a
  call echo %%s:%SID%=%SID2%%%>>%reg2%
)




2008-9-17 00:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 12 楼』:  

getsid/?



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-9-17 00:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: