无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: lxl1638
打印 上一主题 下一主题

[PECMD X86 & X64 V4.0.2011.0501版] WinPE命令解释程序 & WinPE登录命令。

    [复制链接]
871#
 楼主| 发表于 2007-5-8 19:49:21 | 只看该作者
原帖由 pseudo 于 2007-5-8 07:42 PM 发表

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


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

ENVI $YESNO=%YESNO%

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


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

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

使用道具 举报

872#
 楼主| 发表于 2007-5-8 19:55:59 | 只看该作者
PECMD对环境变量操作的功能已相当完善了,关键是如何运用。

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

使用道具 举报

873#
发表于 2007-5-8 22:00:50 | 只看该作者
原帖由 lxl1638 于 2007-5-8 07:49 PM 发表


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

ENVI $YESNO=%YESNO%

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

这招也试过的,未能解决问题。
编写a.CMD 如下:
@echo off
pecmd.exe  BROW 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是更上一次运行时选的。
回复

使用道具 举报

874#
发表于 2007-5-8 23:22:19 | 只看该作者
原帖由 lxl1638 于 2007-5-8 05:21 PM 发表
PECMD是可以设置系统环境变量的,但因Windows本身的限制,系统环境变量要在启动后再刷新才生效。

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

本人也曾经做个类似的 ...

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

使用道具 举报

875#
发表于 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 编辑 ]
回复

使用道具 举报

876#
 楼主| 发表于 2007-5-9 00:43:15 | 只看该作者
原帖由 pseudo 于 2007-5-8 10:00 PM 发表

这招也试过的,未能解决问题。
编写a.CMD 如下:
@echo off
pecmd.exe  BROW 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 编辑 ]
回复

使用道具 举报

877#
发表于 2007-5-9 01:28:41 | 只看该作者

晚上好

看看新作品哦,,,,,,,,,,
回复

使用道具 举报

878#
发表于 2007-5-9 08:25:24 | 只看该作者
原帖由 lxl1638 于 2007-5-9 12:43 AM 发表



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

使用道具 举报

879#
发表于 2007-5-9 13:00:46 | 只看该作者
如不可以,直接读注册表的变量,

这是可以的。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

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

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

使用道具 举报

880#
发表于 2007-5-9 14:01:56 | 只看该作者
原帖由 nn2nn 于 2007-5-9 01:00 PM 发表
如不可以,直接读注册表的变量,

这是可以的。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

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

嗯,打注册表主意。
PECMD目前只能设置不能读取环境变量,有set无get,后者乃我所欲也。
PECMD能读取环境变量或者读取注册表数据就好了。
回复

使用道具 举报

881#
发表于 2007-5-9 14:38:15 | 只看该作者
看看了 谢谢了 支持
回复

使用道具 举报

882#
 楼主| 发表于 2007-5-9 17:08:16 | 只看该作者
原帖由 pseudo 于 2007-5-9 08:25 AM 发表

谢谢楼主详细解释。这大概是上述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文件来实现。
回复

使用道具 举报

883#
发表于 2007-5-10 00:30:15 | 只看该作者
积分不够啊,努力的学习中!
回复

使用道具 举报

884#
发表于 2007-5-10 14:06:55 | 只看该作者
:o :) 顶啊~!谢谢楼主
回复

使用道具 举报

885#
发表于 2007-5-12 14:35:20 | 只看该作者
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
回复

使用道具 举报

886#
发表于 2007-5-13 12:07:10 | 只看该作者
学习中  慢慢来消化
回复

使用道具 举报

887#
发表于 2007-5-13 22:51:43 | 只看该作者
说实在的,看了就知道"学海无涯"的道理,我们的知识少得可怜.谢谢!
回复

使用道具 举报

888#
发表于 2007-5-13 23:14:36 | 只看该作者
繁體中文的原始碼,終於等到這一天了!

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

使用道具 举报

889#
发表于 2007-5-13 23:17:24 | 只看该作者
原始碼下載連結已失效...麻煩請查看一下,謝謝!
回复

使用道具 举报

890#
 楼主| 发表于 2007-5-13 23:24:32 | 只看该作者
直接下载1楼的,将资源中的所中文改成繁体就可以了。

或到这里下载源码:

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

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

使用道具 举报

891#
发表于 2007-5-14 14:23:35 | 只看该作者
功能越来越强,越来越完善,恭喜!
回复

使用道具 举报

892#
发表于 2007-5-14 15:16:24 | 只看该作者

回复 #1 lxl1638 的帖子

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

使用道具 举报

893#
发表于 2007-5-14 15:18:27 | 只看该作者

回复 #1 lxl1638 的帖子

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

使用道具 举报

894#
发表于 2007-5-14 17:32:59 | 只看该作者

改了

我看看又改了什么啊,
回复

使用道具 举报

895#
发表于 2007-5-14 17:48:30 | 只看该作者
奇怪了,回复了,还是看不到附件?
回复

使用道具 举报

896#
发表于 2007-5-14 17:52:43 | 只看该作者
hehe,不错,不错
回复

使用道具 举报

897#
发表于 2007-5-14 23:13:31 | 只看该作者
功能真强大!支持!!
回复

使用道具 举报

898#
发表于 2007-5-18 22:59:33 | 只看该作者
不知Windows server 2003 sp2 支持如何
回复

使用道具 举报

899#
发表于 2007-5-18 23:02:29 | 只看该作者

回复 #1 lxl1638 的帖子

此build 稳定性如何?
回复

使用道具 举报

900#
发表于 2007-5-19 01:15:47 | 只看该作者
学习使人进步!学习了,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-29 18:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表