中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 03:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教:生成的文本的系统变量为何不被识别?【已结】 查看 1,040 回复 11
楼 主 请教:生成的文本的系统变量为何不被识别?【已结】 发表于 2007-06-15 20:45 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
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 ]
2 发表于 2007-06-15 20:57 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线

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 ]
3 发表于 2007-06-15 21:02 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
楼上,你的做法不行,将输出路径的%也注释掉根本找不着路径。那个不能改。
4 发表于 2007-06-15 21:31 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
没有问题啊~测试也正常……
5 发表于 2007-06-16 00:03 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
当前用户启动项:%userprofile%\「开始」菜单\程序\启动

你说的是这个正常结果吗?结果不应该是这样的。因为%userprofile%是个系统变量,正常情况下正常设置下应该被解析成C:\document and settings\CURRENTUSER的,但是它就是个字符,你手动输入 echo %userprofile%\「开始」菜单\程序\启动显示出来的就是解析后的结果了。
不解。
6 发表于 2007-06-16 01:31 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
明白楼主的意思了
测试通过:

@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
7 发表于 2007-06-16 15:03 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
谢谢HAT兄的继续关注,不过可能你还是没明白我的意思,我不是想读取path.txt的路径,而是想读取里面所存注的用户启动项所在的路径,按照普通设置就应该是“%userprofile%\「开始」菜单\程序\启动”,我想的是如何将读取出的文本里面的%userprofile%直接给解析成当前用户文件所在路径,但在我给出的代码里面是不被解析的,楼上的%temp%虽给解析了,但却不是我要的路径。谢谢。
8 发表于 2007-06-17 15:02 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
还是没人想到原因吗?版主们请看看哈。。。
9 发表于 2007-06-17 15:33 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
path.txt里面格式是:“%userprofile%\「开始」菜单\程序\启动”???
10 发表于 2007-06-17 17:50 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
对,按常理,应该给解析才对啊。
11 发表于 2007-06-17 22:13 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
for直接读取txt内容,并不能直接把txt内的%userprofile%最为变量,改动一下:
for /f "tokens=*" %%i in (%temp%\path.txt) do call set user_startup=%%i

PS:开头已经有“@echo off”了,后面可以不用“@”
12 发表于 2007-06-17 23:30 ·  中国 广东 广州 鹏博士宽带
初级用户
★★
积分 176
发帖 78
注册 2007-04-15 10:53
19年会员
UID 85268
性别 男
状态 离线
谢谢楼上,问题解决,以后遇到问题如果不能以正常模式解决尝试用下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
论坛跳转: