中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:生成的文本的系统变量为何不被识别?【已结】
作者:
标题: 请教:生成的文本的系统变量为何不被识别?【已结】 上一主题 | 下一主题
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『楼 主』:  请教:生成的文本的系统变量为何不被识别?【已结】


echo Set WshShell = Wscript.CreateObject("Wscript.Shell")>%temp%\temp.vbs
echo tt=WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\user Shell Folders\startup") '' Read from value "Val">>%temp%\temp.vbs
echo set fso=createobject("scripting.filesystemobject")>>%temp%\temp.vbs
echo set fil=fso.opentextfile("%temp%\path.txt",2,true)>>%temp%\temp.vbs
echo fil.write tt>>%temp%\temp.vbs
echo fil.close>>%temp%\temp.vbs
echo set fil=nothing>>%temp%\temp.vbs
echo set fso=nothing>>%temp%\temp.vbs
echo set WshShell=nothing>>%temp%\temp.vbs
call %temp%\temp.vbs
for /f "tokens=*" %%i in ('type %temp%\path.txt') do set user_startup=%%i
echo 当前用户启动项:%user_startup%
pause
[ Last edited by Vampire on 2007-6-17 at 11:29 PM ]

2007-6-15 20:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


echo Set WshShell = Wscript.CreateObject("Wscript.Shell")>%temp%\temp.vbs
echo tt=WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\user Shell Folders\startup") '' Read from value "Val">>%temp%\temp.vbs
echo set fso=createobject("scripting.filesystemobject")>>%temp%\temp.vbs
echo set fil=fso.opentextfile("%%temp%%\path.txt",2,true)>>%temp%\temp.vbs
echo fil.write tt>>%temp%\temp.vbs
echo fil.close>>%temp%\temp.vbs
echo set fil=nothing>>%temp%\temp.vbs
echo set fso=nothing>>%temp%\temp.vbs
echo set WshShell=nothing>>%temp%\temp.vbs
call %temp%\temp.vbs
for /f "tokens=*" %%i in ('type %temp%\path.txt') do set user_startup=%%i
echo 当前用户启动项:%user_startup%
pause
[ Last edited by HAT on 2007-6-15 at 08:58 PM ]

2007-6-15 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 3 楼』:  

楼上,你的做法不行,将输出路径的%也注释掉根本找不着路径。那个不能改。

2007-6-15 21:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 4 楼』:  

没有问题啊~测试也正常……

2007-6-15 21:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 5 楼』:  



  Quote:
当前用户启动项:%userprofile%\「开始」菜单\程序\启动

你说的是这个正常结果吗?结果不应该是这样的。因为%userprofile%是个系统变量,正常情况下正常设置下应该被解析成C:\document and settings\CURRENTUSER的,但是它就是个字符,你手动输入 echo %userprofile%\「开始」菜单\程序\启动显示出来的就是解析后的结果了。
不解。

2007-6-16 00:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

明白楼主的意思了
测试通过:
@echo off
echo Set WshShell = Wscript.CreateObject("Wscript.Shell")>%temp%\temp.vbs
echo tt=WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\user Shell Folders\startup") '' Read from value "Val">>%temp%\temp.vbs
echo set fso=createobject("scripting.filesystemobject")>>%temp%\temp.vbs
echo set fil=fso.opentextfile("%temp%\path.txt",2,true)>>%temp%\temp.vbs
echo fil.write tt>>%temp%\temp.vbs
echo fil.close>>%temp%\temp.vbs
echo set fil=nothing>>%temp%\temp.vbs
echo set fso=nothing>>%temp%\temp.vbs
echo set WshShell=nothing>>%temp%\temp.vbs
call %temp%\temp.vbs
for /f "tokens=*" %%i in ("%temp%\path.txt") do @set user_startup=%%i
echo 当前用户启动项:%user_startup%
pause


2007-6-16 01:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 7 楼』:  

谢谢HAT兄的继续关注,不过可能你还是没明白我的意思,我不是想读取path.txt的路径,而是想读取里面所存注的用户启动项所在的路径,按照普通设置就应该是“%userprofile%\「开始」菜单\程序\启动”,我想的是如何将读取出的文本里面的%userprofile%直接给解析成当前用户文件所在路径,但在我给出的代码里面是不被解析的,楼上的%temp%虽给解析了,但却不是我要的路径。谢谢。

2007-6-16 15:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 8 楼』:  

还是没人想到原因吗?版主们请看看哈。。。

2007-6-17 15:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  

path.txt里面格式是:“%userprofile%\「开始」菜单\程序\启动”???



2007-6-17 15:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 10 楼』:  

对,按常理,应该给解析才对啊。

2007-6-17 17:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  

for直接读取txt内容,并不能直接把txt内的%userprofile%最为变量,改动一下:
for /f "tokens=*" %%i in (%temp%\path.txt) do call set user_startup=%%i

PS:开头已经有“@echo off”了,后面可以不用“@”



2007-6-17 22:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Vampire
初级用户





积分 176
发帖 78
注册 2007-4-15
状态 离线
『第 12 楼』:  

谢谢楼上,问题解决,以后遇到问题如果不能以正常模式解决尝试用下call。下面为正常读取代码:
@echo off
echo Set WshShell = Wscript.CreateObject("Wscript.Shell")>%temp%\temp.vbs
echo tt=WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\user Shell Folders\startup")>>%temp%\temp.vbs
echo set fso=createobject("scripting.filesystemobject")>>%temp%\temp.vbs
echo set fil=fso.opentextfile("%temp%\path.txt",2,true)>>%temp%\temp.vbs
echo fil.write tt>>%temp%\temp.vbs
echo fil.close>>%temp%\temp.vbs
echo set fil=nothing>>%temp%\temp.vbs
echo set fso=nothing>>%temp%\temp.vbs
echo set WshShell=nothing>>%temp%\temp.vbs
call "%temp%\temp.vbs"
for /f "tokens=*" %%i in (%temp%\path.txt) do call set user_startup=%%i
echo 当前用户启动项:%user_startup%
pause


2007-6-17 23:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: