Board logo

标题: [已结帖-有新问题] 关于自动批量替换注册表内路径的问题 [打印本页]

作者: windzb     时间: 2006-10-29 07:26    标题: [已结帖-有新问题] 关于自动批量替换注册表内路径的问题

得到 lxmxn 大哥的提醒,单独开个帖。

我的问题是,想把联众游戏绿化,直接使用批处理运行取得当前游戏目录路径,并替换同目录下的game.reg里的游戏路径。
game.reg已经提取出来,游戏路径为 l:\\游戏

%CD% 取得的路径是单斜线的, l:\游戏  直接替换可能不行。有什么好的方法吗?

[ Last edited by windzb on 2006-10-30 at 05:24 PM ]
作者: lxmxn     时间: 2006-10-29 07:33

  你需要把"game.reg"文件的内容也帖上来,这样才好根据里面文本的内容来对里面的字串进行提取,进而用批处理来替换需要替换的字串。

作者: windzb     时间: 2006-10-29 07:44
全部内容很长的 总共154K 主要是要替换 l:\\游戏 这个路径

下面截取一段吧

=========== 我是分割线 ===========

[HKEY_CURRENT_USER\Software\Globallink]

[HKEY_CURRENT_USER\Software\Globallink\Game]

[HKEY_CURRENT_USER\Software\Globallink\Game\Share]
"Path"="l:\\游戏\\Game\\share"
"OFPath"="l:\\游戏\\Game\\share\\OurFriend\\ourfriend.exe"
"RegisterPort"=dword:000007d0
"FirstRun"=dword:00000001
"Version"="2.6.0.15"
"registerurl"="http://register.ourgame.com/regist/index.html"
"RoomDat"=dword:00020001
"NewRegisterServer"="play2.ourgame.com(联众主站)"
"MainRegisterSvr1"="play.ourgame.com(联众主站)"
"MainRegisterSvr2"="play2.ourgame.com(联众主站)"
"MainRegister80Svr1"="proxy.ourgame.com(联众主站)"
"MainRegister80Svr2"="proxy2.ourgame.com(联众主站)"
"NewRegister80Server"="proxy.ourgame.com(联众主站)"
"LastVersion"="2.6.0.15"
"RunCount"=dword:00000007
"IdleSecond"=dword:0000001e
"Use80PortSvr"=dword:00000000

[HKEY_CURRENT_USER\Software\Globallink\Game\Share\Color]
"RoomServerListBkColor"=dword:0088b8d9
"DisBkColor"=dword:00fef4f1
"ListBkColor"=dword:00e8e0dc
"IOMsgColor"=dword:00004080
"SaidTitleColor"=dword:00414991
"SaidMsgColor"=dword:00c08000
"SecureColor"=dword:00808080
"EmoteColor"=dword:00c08080
"ListFrColor"=dword:00642b1e
"DefaultPath"="l:\\游戏\\Game\\share\\Theme\\default"
"GuestFrColor"=dword:00400080
"GuestBkColor"=dword:00f0b8a2
"GroupFrColor"=dword:00808040
"GroupBkColor"=dword:00f0b8a2
"MatchPlayerFrColor"=dword:004080ff
"MatchPlayerBkColor"=dword:00f0b8a2
"EnemyFrColor"=dword:0000e1e1
"EnemyBkColor"=dword:00f0b8a2
"FriendBkColor"=dword:00f0b8a2
"FriendFrColor"=dword:00808040
"SetDefaultTheme"=dword:00000001
"SetNewTheme2"=dword:00000001
"CurNativeTheme"=""

。。。。。。
================ 太多,没截完 =========

[ Last edited by windzb on 2006-10-29 at 07:48 AM ]
作者: xuantian     时间: 2006-10-29 07:50
用记事本的替换功能不就行了吗
作者: windzb     时间: 2006-10-29 07:52
有方法自动替换吗?

[ Last edited by windzb on 2006-10-29 at 08:02 AM ]
作者: namejm     时间: 2006-10-29 09:27
  可以试试下面的代码:
@echo off
set route=%cd%
set route=%route:\=\\%
cd.>_test.reg
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.reg) do (
    set var=%%i
    set var=!var:l:\\游戏=%route%!
    >>_test.reg echo !var!
)

作者: lxmxn     时间: 2006-10-29 10:44

sed -e "s/l:\\\\游戏/%cd:\=\\\\%/" game.reg
  sed 工具可以在论坛搜索一下,论坛里面有很多关于 sed 命令的介绍,也提供了下载地址。你用的时候,把 sed 放在环境变量中即可。

作者: windzb     时间: 2006-10-30 08:42
感谢,我先测试一下。
作者: windzb     时间: 2006-10-30 09:37


  Quote:
Originally posted by namejm at 2006-10-29 09:27 AM:
  可以试试下面的代码:
[code]
@echo off
set route=%cd%
set route=%route:\=\\%
cd.>_test.reg
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.reg) do ( ...

测试成功~ 十分感谢namejm版主~~

同时也谢谢lxmxn的帮忙~
作者: windzb     时间: 2006-10-30 17:24


  Quote:
@echo off
set route=%cd%
set route=%route:\=\\%
cd.>_test.reg
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.reg) do (
    set var=%%i
    set var=!var:l:\\游戏=%route%!
    >>_test.reg echo !var!
)
endlocal
regedit /s _test.reg
del _test.reg
start .\GLWorld.exe
exit

目前这样用,直接使用这个批处理启动游戏,注册后删除_test.reg。
但是就算这样的话每次运行都要花时间替换,注册表比较大,替换时间有点长。
所以想不删除_test.reg,使用命令检测_test.reg里的游戏目录是当前目录,然后跳过替换,直接注册_test.reg后运行游戏,可以吗?
请指教。

就不知道检测的时间和替换的时间是否一样长了。。。

顺便问一个问题,为什么把route改成path后,regedit就变成不是内部命令也不是外部命令了?
使用其他变量名都是可以的。。。。敏感字?
那也应该是PATH报错才对啊。。。。奇怪中。。。。。

[ Last edited by windzb on 2006-10-30 at 07:07 PM ]
作者: 不得不爱     时间: 2006-10-30 20:49
我认为游戏路径可以不要,让系统自己找这样速度会快点
作者: windzb     时间: 2006-11-2 21:50
多谢了~`呵呵`已经完成了
作者: 不得不爱     时间: 2006-11-2 22:18
l:\\游戏和l:\游戏是用起来是一样的