中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 20:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结帖-有新问题] 关于自动批量替换注册表内路径的问题
楼 主 [已结帖-有新问题] 关于自动批量替换注册表内路径的问题 发表于 2006-10-29 07:26 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
得到 lxmxn 大哥的提醒,单独开个帖。

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

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

[ Last edited by windzb on 2006-10-30 at 05:24 PM ]
2 发表于 2006-10-29 07:33 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线

  你需要把"game.reg"文件的内容也帖上来,这样才好根据里面文本的内容来对里面的字串进行提取,进而用批处理来替换需要替换的字串。
3 发表于 2006-10-29 07:44 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
全部内容很长的 总共154K 主要是要替换 l:\\游戏 这个路径

下面截取一段吧

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






"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


"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 ]
4 发表于 2006-10-29 07:50 ·  中国 四川 绵阳 电信
高级用户
★★
积分 587
发帖 282
注册 2006-04-10 03:40
UID 53599
性别 男
状态 离线
用记事本的替换功能不就行了吗
5 发表于 2006-10-29 07:52 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
有方法自动替换吗?

[ Last edited by windzb on 2006-10-29 at 08:02 AM ]
6 发表于 2006-10-29 09:27 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  可以试试下面的代码:

@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!
)
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
7 发表于 2006-10-29 10:44 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线


sed -e "s/l:\\\\游戏/%cd:\=\\\\%/" game.reg

  sed 工具可以在论坛搜索一下,论坛里面有很多关于 sed 命令的介绍,也提供了下载地址。你用的时候,把 sed 放在环境变量中即可。
8 发表于 2006-10-30 08:42 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
感谢,我先测试一下。
9 发表于 2006-10-30 09:37 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
Originally posted by namejm at 2006-10-29 09:27 AM:
  可以试试下面的代码:

@echo off
set route=%cd%
set route=%route:\=\\%
cd.>_test.reg
setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.reg) do ( ...



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

同时也谢谢lxmxn的帮忙~
10 发表于 2006-10-30 17:24 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线

@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 ]
11 发表于 2006-10-30 20:49 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
UID 42843
性别 男
来自 四川南充
状态 离线
12 发表于 2006-11-02 21:50 ·  中国 四川 成都 电信
初级用户
积分 32
发帖 14
注册 2006-10-28 01:47
UID 68567
性别 男
状态 离线
多谢了~`呵呵`已经完成了
13 发表于 2006-11-02 22:18 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
UID 42843
性别 男
来自 四川南充
状态 离线
论坛跳转: