中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]for 命令如何正确执行有变量的命令[已完结]
作者:
标题: [求助]for 命令如何正确执行有变量的命令[已完结] 上一主题 | 下一主题
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『楼 主』:  [求助]for 命令如何正确执行有变量的命令[已完结]

我想在BAT中执行REG EXPORT来备份注册表的某些项(这些项可能有可格等特殊符号),备份时我采用让用户在REGBAK.LST中自己定义要备份那些项,但是因为我备份的目录和文件名是不固定的,也就是说这个路径和备份名称我是在批处理中设置的变量,但是在REGBAK.LST引用变量后使用FOR命令调用却不当作变量处理.如批处理中WPATH定义路径变量,但只REGBAK.LST引用了这个WPATH变量,但执行时却不能解析这个变量,如何解决这个问题?不知道高手们是否遇到过这样的问题.
批处理中的内容:
SET WPATH=%CD%
FOR /F "eol=; tokens=1,2* delims= " %%I IN (REGBAK.LST) DO (REG EXPORT %%I)
PAUSE
REGBAK.LST中的内容:
;安装程序时需要先备份的注册表项可以直接放到这里,格式:"注册表项 注册表名",这个主要配合注册表文件OFFICE.BAK使用
"HKCR\TypeLib" %WPATH%\REGBAK\TypeLib.SVR
"HKCR\CLSID" %WPATH%\REGBAK\CLSID.SVR
"HKCR\Interface" %WPATH%\REGBAK\Interface.SVR
"HKCR\Installer" %WPATH%\REGBAK\Installer.SVR
"HKCR\Licenses" %WPATH%\REGBAK\Licenses.SVR
"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18" %WPATH%\REGBAK\S1518.SVR
"HKCU\SOFTWARE\Microsoft\Office" %WPATH%\REGBAK\OFFICE1.SVR
"HKLM\SOFTWARE\Microsoft\Office" %WPATH%\REGBAK\OFFICE2.SVR
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active IMM" %WPATH%\REGBAK\xyz.SVR
[ Last edited by HUNRYBECKY on 2007-1-3 at 07:53 AM ]

2007-1-3 05:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 2 楼』:  

注意的是其实REGBAK.LST中的变量部分是REG EXPORT命令的一部分,如果把%WPATH%放在批处理中,那么因为需要导出的注册表项可能因为特殊符号如空格的影响很难使用FOR命令分解出几个部分再合成一个完整的命令,所以我的思路是直接在LST文件中让用户定义路径

2007-1-3 05:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  

在线等待,自己顶一个.

2007-1-3 05:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tghksj
社区乞丐

此图片另存后死机



积分 -49
发帖 90
注册 2006-12-2
状态 离线
『第 4 楼』:  

你需要的是将 %WPATH% 这个变量的值传递给REG EXPORT %%I

所以需要用CALL进行调用.
SET WPATH=%CD%
FOR /F "eol=; tokens=*" %%i IN (REGBAK.LST) DO (CALL REG EXPORT %%i)
[ Last edited by tghksj on 2007-1-2 at 05:27 PM ]



我的网络笔记本.[color=Red]非联系本人请勿访问![/color]http://w.vicp.net[img]http://zhenlove.com.cn/cndos/fileup/files/QM2.jpg[/img]
2007-1-3 06:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 5 楼』:  

因为我系统没有REG命令,因为是在朋友家临时的,所以没法测试,不过你最初提供的默认时以空格为分隔符有些错误,因为你文本最后一行
"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active IMM" %WPATH%\REGBAK\xyz.SVR
你并不能得到理想的结果,所以建议以百分号作为分隔符号!
其次不知道REG命令对于CALL命令的调用是否有效,所以不知道测试后的结果是否正确,请先试用以下代码,如果出现问题在解决
@echo off&setlocal
set WPATH=%cd%
for /f "tokens=1* delims=%%" %%i in (REGBAK.LST) do call reg export %%i %%%%j
REG EXPORT的具体参数不清楚了,我是 reg export 注册表键值 备份路径  这样写,的如有不妥请自行修改..



我今后在论坛的目标就是做个超级坏人!!!
2007-1-3 06:26
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 6 楼』:  

不好意思,已经有人回复你了,没有看到,呵呵............



我今后在论坛的目标就是做个超级坏人!!!
2007-1-3 06:30
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by tghksj at 2007-1-3 06:26:
你需要的是将 %WPATH% 这个变量的值传递给REG EXPORT %%I

所以需要用CALL进行调用.

[CODE]
SET WPATH=%CD%
FOR /F "eol=; tokens=*" %%i IN (REGBAK.LST) DO (CALL RE ...

兄的代码经过测试还是无效,和不使用CALL结果一样:系统找不到需要的注册表项和值

2007-1-3 07:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by 9527 at 2007-1-3 06:26:
因为我系统没有REG命令,因为是在朋友家临时的,所以没法测试,不过你最初提供的默认时以空格为分隔符有些错误,因为你文本最后一行
[code]
&quo ...

谢谢兄的回答,测试结果和4楼的一样,我事先也想到这个方法来回避空格的问题。经过各种测试,似乎REG EXPORT 不支持保存路径中使用变量一样

2007-1-3 07:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 9 楼』:  

不好意思,因为刚回到家里,所以直接测试上面代码出现一样的错误,原来是我自己搞错了,因为我还没有建立REGBAK目录,意思老是提示找不到,想来想去没有道理呀,结果自己检查发现自己范了这么低级的错误。

再次感谢9527和tghksj两兄,现在终于知道了要调用外部命令最好使用CALL,我在使用外部命令是一直都没有使用CALL,嘿嘿。

2007-1-3 07:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: