现在的问题是能否使对环境变量的更改立即生效。
在CMD文件中:
mess wwww @tttttttt #YN
echo %YESNO%
显示的是开始执行CMD时的YESNO值,用户对MESS的选择无法在该CMD文件内获知进而作相应处理。我试过各 ...
变通一下,将%YESNO%的值赋给一个新的系统环境变量就可以了,如:
ENVI $YESNO=%YESNO%
那么这个YESNO将会从进程级的环境变量提升为系统级环境变量了,当然这个变量的名称你可自行设置,用别的名称也可。
另,BROW命令的选择结果会保存在系统环境变量中的,你看一下说明。
[ 本帖最后由 lxl1638 于 2007-5-8 07:51 PM 编辑 ] PECMD对环境变量操作的功能已相当完善了,关键是如何运用。
PECMD也有一定的字符串的比较功能,目前欠的是数值运算能力。 原帖由 lxl1638 于 2007-5-8 07:49 PM 发表 http://shop.mgcgame.com/images/common/back.gif
变通一下,将%YESNO%的值赋给一个新的系统环境变量就可以了,如:
ENVI $YESNO=%YESNO%
那么这个YESNO将会从进程级的环境变量提升为系统级环境变量了,当然这个变量的名称你可自行设置,用别的名称也 ...
这招也试过的,未能解决问题。
编写a.CMD 如下:
@echo off
pecmd.exeBROW c:\windows
rem 现在无法获得用户在brow中选择了什么,下一行显示的只是brow前的变量值
echo TARGET_ROOT=%TARGET_ROOT%
rem 转储到X中,也达不到目的
pecmd.exe ENVI $X=%TARGET_ROOT%
echo X=%X%
rem 刷新也不行
pecmd.exe ENVI
echo X=%X%
echo TARGET_ROOT=%TARGET_ROOT%
pause
将a.cmd运行数次,每次选不同目录或文件,那么刚选的总显示不出,显示的TARGET_ROOT是上次运行时选的,而X是更上一次运行时选的。 原帖由 lxl1638 于 2007-5-8 05:21 PM 发表 http://bbs.wuyou.net/images/common/back.gif
PECMD是可以设置系统环境变量的,但因Windows本身的限制,系统环境变量要在启动后再刷新才生效。
相信楼主这个工具也一样,在PE登录期间设置的系统环境变量也要到启动后刷新才生效。
本人也曾经做个类似的 ...
是一样的吧,写了REG,再叫系统更新环境变量,以前在128MV8搞的,是信不过LZ这个才做的,结果好象的较好(忘记了),你的好象没有叫系统更新环境变量,是吧?
pseudo
pecmd.exe BROW c:\windowsrem 现在无法获得用户在brow中选择了什么,下一行显示的只是brow前的变量值
//在这加上
setenv tt pp
//setenv 可以刷新全部变量,试试可以不.
//如不可以,直接读注册表的变量,
echo TARGET_ROOT=%TARGET_ROOT%
[ 本帖最后由 nn2nn 于 2007-5-8 11:36 PM 编辑 ] 原帖由 pseudo 于 2007-5-8 10:00 PM 发表 http://bbs.wuyou.net/images/common/back.gif
这招也试过的,未能解决问题。
编写a.CMD 如下:
@echo off
pecmd.exeBROW c:\windows
rem 现在无法获得用户在brow中选择了什么,下一行显示的只是brow前的变量值
echo TARGET_ROOT=%TARGET_ROOT%
re ...
这个是Windows的管制问题,启动一个A.CMD(实质是CMD.EXE),它的环境变量列表由启动它的进程传入,
而在A.CMD内再启动一个PECMD.EXE进程,则PECMD.EXE实际是CMD.EXE的子进程(此时CMD.EXE是PECMD.EXE的父进程),
PECMD.EXE所设置的环境变量不会对A.CMD的环境变量列表产生作用(或影响),因为A.CMD的环境变量是由它的父进程决定的,
也可以说子进程不能现场修改父进程的环境变量。
但PECMD.EXE设置的系统环境变量会在下一次启动CMD.EXE时起作用。
所以,在下一次启动CMD时,TARGET_ROOT会显示的是上一次的结果;X则是更上一次再上一次的结果(在一个A.CMD内,X不能显示
当前结果,只能用上一次的结果)。
或者本人这样解释会很抽象,它实际是Windows决定的_________一个进程的环境变量由启动它的父进程传入,就是说一个进程有什么样的环境变量在它启动时已经决定了,而它再启动的子进程无法修改这些已决定的环境变量。
[ 本帖最后由 lxl1638 于 2007-5-9 12:45 AM 编辑 ]
晚上好
看看新作品哦,,,,,,,,,, 原帖由 lxl1638 于 2007-5-9 12:43 AM 发表 http://bbs.wuyou.net/images/common/back.gif这个是Windows的管制问题,启动一个A.CMD(实质是CMD.EXE),它的环境变量列表由启动它的进程传入,
而在A.CMD内再启动一个PECMD.EXE进程,则PECMD.EXE实际是CMD.EXE的子进程(此时CMD.EXE是PECMD.EXE的父进 ...
谢谢楼主详细解释。这大概是上述a.CMD 现象的原因。
不过,看看以下脚本:
文件A.CMD:
@echo off
set X=A
echo X(before)=%X%
echo Y(before)=%Y%
call b.CMD
echo X(after)=%X%
echo Y(after)=%Y%
pause
文件B.CMD:
set X=%X%B
set Y=B
运行A.CMD后显示:
X(before)=A
Y(before)=
X(after)=AB
Y(after)=B
这里,在A.CMD中能得到B.CMD的结果。另外,wfolder.exe也能做到结果立即可以感知。
我的问题是,能不能提供某种手段使得在CMD文件中能获得BROW本次选择结果。
这不是不可能的,一个笨办法是:PECMD根据BROW的结果,生成一个B.CMD文件,内容类似于set TARGET_ROOT=C:\Windows
然后我来调用这个B.CMD以获得用户选择信息。或者,PECMD设置一个命令行参数指示是否在console显示用户选择结果,我再在CMD文件中利用管道等手段截获显示信息,从中获取结果。
总之,给个手段啊。 如不可以,直接读注册表的变量,
这是可以的。
"TARGET_ROOT"="C:\\外置程序"
[ 本帖最后由 nn2nn 于 2007-5-9 01:08 PM 编辑 ] 原帖由 nn2nn 于 2007-5-9 01:00 PM 发表 http://bbs.wuyou.net/images/common/back.gif
如不可以,直接读注册表的变量,
这是可以的。
"TARGET_ROOT"="C:\\外置程序"
嗯,打注册表主意。
PECMD目前只能设置不能读取环境变量,有set无get,后者乃我所欲也。
PECMD能读取环境变量或者读取注册表数据就好了。 看看了 谢谢了 支持 原帖由 pseudo 于 2007-5-9 08:25 AM 发表 http://bbs.wuyou.net/images/common/back.gif
谢谢楼主详细解释。这大概是上述a.CMD 现象的原因。
不过,看看以下脚本:
文件A.CMD:
@echo off
set X=A
echo X(before)=%X%
echo Y(before)=%Y%
call b.CMD
echo X(after)=%X%
echo Y(after)=%Y% ...
这个示例的A.CMD和B.CMD都是在同一进程内,CMD的CALL命令实际上是将B.CMD看成是一个过程了,所以B.CMD设置环境变量的代码可以看成是A.CMD的一部分。
就目前而言,要利用PECMD的BROW命令的环境变量,还是要通过PECMD的LOAD命令加载INI文件来实现。 积分不够啊,努力的学习中! :o :) 顶啊~!谢谢楼主 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 学习中慢慢来消化 说实在的,看了就知道"学海无涯"的道理,我们的知识少得可怜.谢谢! 繁體中文的原始碼,終於等到這一天了!
非常感謝您的無私分享!! 原始碼下載連結已失效...麻煩請查看一下,謝謝! 直接下载1楼的,将资源中的所中文改成繁体就可以了。
或到这里下载源码:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=104612
[ 本帖最后由 lxl1638 于 2007-5-13 11:26 PM 编辑 ] 功能越来越强,越来越完善,恭喜!