标题: 请教:生成的文本的系统变量为何不被识别?【已结】
[打印本页]
作者: Vampire
时间: 2007-6-15 20:45
标题: 请教:生成的文本的系统变量为何不被识别?【已结】
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 ]
作者: HAT
时间: 2007-6-15 20:57
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 ]
作者: Vampire
时间: 2007-6-15 21:02
楼上,你的做法不行,将输出路径的%也注释掉根本找不着路径。那个不能改。
作者: slore
时间: 2007-6-15 21:31
没有问题啊~测试也正常……
作者: Vampire
时间: 2007-6-16 00:03
Quote: |
当前用户启动项:%userprofile%\「开始」菜单\程序\启动 |
|
你说的是这个正常结果吗?结果不应该是这样的。因为%userprofile%是个系统变量,正常情况下正常设置下应该被解析成C:\document and settings\CURRENTUSER的,但是它就是个字符,你手动输入 echo %userprofile%\「开始」菜单\程序\启动显示出来的就是解析后的结果了。
不解。
作者: HAT
时间: 2007-6-16 01:31
明白楼主的意思了
测试通过:
@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
作者: Vampire
时间: 2007-6-16 15:03
谢谢HAT兄的继续关注,不过可能你还是没明白我的意思,我不是想读取path.txt的路径,而是想读取里面所存注的用户启动项所在的路径,按照普通设置就应该是“%userprofile%\「开始」菜单\程序\启动”,我想的是如何将读取出的文本里面的%userprofile%直接给解析成当前用户文件所在路径,但在我给出的代码里面是不被解析的,楼上的%temp%虽给解析了,但却不是我要的路径。谢谢。
作者: Vampire
时间: 2007-6-17 15:02
还是没人想到原因吗?版主们请看看哈。。。
作者: zh159
时间: 2007-6-17 15:33
path.txt里面格式是:“%userprofile%\「开始」菜单\程序\启动”???
作者: Vampire
时间: 2007-6-17 17:50
对,按常理,应该给解析才对啊。
作者: zh159
时间: 2007-6-17 22:13
for直接读取txt内容,并不能直接把txt内的%userprofile%最为变量,改动一下:
for /f "tokens=*" %%i in (%temp%\path.txt) do call set user_startup=%%i
PS:开头已经有“@echo off”了,后面可以不用“@”
作者: Vampire
时间: 2007-6-17 23:30
谢谢楼上,问题解决,以后遇到问题如果不能以正常模式解决尝试用下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