lxl1638 发表于 2007-5-8 19:49:21

原帖由 pseudo 于 2007-5-8 07:42 PM 发表 http://bbs.wuyou.net/images/common/back.gif

现在的问题是能否使对环境变量的更改立即生效。
在CMD文件中:
mess wwww @tttttttt #YN
echo %YESNO%
显示的是开始执行CMD时的YESNO值,用户对MESS的选择无法在该CMD文件内获知进而作相应处理。我试过各 ...

变通一下,将%YESNO%的值赋给一个新的系统环境变量就可以了,如:

ENVI $YESNO=%YESNO%

那么这个YESNO将会从进程级的环境变量提升为系统级环境变量了,当然这个变量的名称你可自行设置,用别的名称也可。


另,BROW命令的选择结果会保存在系统环境变量中的,你看一下说明。

[ 本帖最后由 lxl1638 于 2007-5-8 07:51 PM 编辑 ]

lxl1638 发表于 2007-5-8 19:55:59

PECMD对环境变量操作的功能已相当完善了,关键是如何运用。

PECMD也有一定的字符串的比较功能,目前欠的是数值运算能力。

pseudo 发表于 2007-5-8 22:00:50

原帖由 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是更上一次运行时选的。

nn2nn 发表于 2007-5-8 23:22:19

原帖由 lxl1638 于 2007-5-8 05:21 PM 发表 http://bbs.wuyou.net/images/common/back.gif
PECMD是可以设置系统环境变量的,但因Windows本身的限制,系统环境变量要在启动后再刷新才生效。

相信楼主这个工具也一样,在PE登录期间设置的系统环境变量也要到启动后刷新才生效。

本人也曾经做个类似的 ...
是一样的吧,写了REG,再叫系统更新环境变量,以前在128MV8搞的,是信不过LZ这个才做的,结果好象的较好(忘记了),你的好象没有叫系统更新环境变量,是吧?

nn2nn 发表于 2007-5-8 23:34:26

pseudo

pecmd.exe  BROW c:\windows
rem 现在无法获得用户在brow中选择了什么,下一行显示的只是brow前的变量值
//在这加上
setenv tt pp
//setenv 可以刷新全部变量,试试可以不.
//如不可以,直接读注册表的变量,
echo TARGET_ROOT=%TARGET_ROOT%

[ 本帖最后由 nn2nn 于 2007-5-8 11:36 PM 编辑 ]

lxl1638 发表于 2007-5-9 00:43:15

原帖由 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 编辑 ]

sinmo 发表于 2007-5-9 01:28:41

晚上好

看看新作品哦,,,,,,,,,,

pseudo 发表于 2007-5-9 08:25:24

原帖由 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文件中利用管道等手段截获显示信息,从中获取结果。
总之,给个手段啊。

nn2nn 发表于 2007-5-9 13:00:46

如不可以,直接读注册表的变量,

这是可以的。


"TARGET_ROOT"="C:\\外置程序"

[ 本帖最后由 nn2nn 于 2007-5-9 01:08 PM 编辑 ]

pseudo 发表于 2007-5-9 14:01:56

原帖由 nn2nn 于 2007-5-9 01:00 PM 发表 http://bbs.wuyou.net/images/common/back.gif
如不可以,直接读注册表的变量,

这是可以的。


"TARGET_ROOT"="C:\\外置程序"
嗯,打注册表主意。
PECMD目前只能设置不能读取环境变量,有set无get,后者乃我所欲也。
PECMD能读取环境变量或者读取注册表数据就好了。

chinaboy 发表于 2007-5-9 14:38:15

看看了 谢谢了 支持

lxl1638 发表于 2007-5-9 17:08:16

原帖由 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文件来实现。

timeday 发表于 2007-5-10 00:30:15

积分不够啊,努力的学习中!

h107227 发表于 2007-5-10 14:06:55

:o :) 顶啊~!谢谢楼主

awei 发表于 2007-5-12 14:35:20

kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

wuhousheng 发表于 2007-5-13 12:07:10

学习中慢慢来消化

xyzhang 发表于 2007-5-13 22:51:43

说实在的,看了就知道"学海无涯"的道理,我们的知识少得可怜.谢谢!

firch 发表于 2007-5-13 23:14:36

繁體中文的原始碼,終於等到這一天了!

非常感謝您的無私分享!!

firch 发表于 2007-5-13 23:17:24

原始碼下載連結已失效...麻煩請查看一下,謝謝!

lxl1638 发表于 2007-5-13 23:24:32

直接下载1楼的,将资源中的所中文改成繁体就可以了。

或到这里下载源码:

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=104612

[ 本帖最后由 lxl1638 于 2007-5-13 11:26 PM 编辑 ]

loucm 发表于 2007-5-14 14:23:35

功能越来越强,越来越完善,恭喜!

zdx1818 发表于 2007-5-14 15:16:24

回复 #1 lxl1638 的帖子

非常感谢,无一回来就看到新东东了

zdx1818 发表于 2007-5-14 15:18:27

回复 #1 lxl1638 的帖子

哈哈,五一回来就看到新东东了

laoliang 发表于 2007-5-14 17:32:59

改了

我看看又改了什么啊,

zdx1818 发表于 2007-5-14 17:48:30

奇怪了,回复了,还是看不到附件?

929mzd 发表于 2007-5-14 17:52:43

hehe,不错,不错

computer 发表于 2007-5-14 23:13:31

功能真强大!支持!!

dalwins 发表于 2007-5-18 22:59:33

不知Windows server 2003 sp2 支持如何

dalwins 发表于 2007-5-18 23:02:29

回复 #1 lxl1638 的帖子

此build 稳定性如何?

abc666 发表于 2007-5-19 01:15:47

学习使人进步!学习了,谢谢!
页: 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39
查看完整版本: [PECMD X86 & X64 V4.0.2011.0501版] WinPE命令解释程序 & WinPE登录命令。