找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: mdyblog

[更新376#2825]PECMD2012.1.80.13_Win32_64.多窗口多线程.裸机系统2.3.3.1+18M酷M...

   火... [复制链接]
 楼主| 发表于 2013-3-30 14:13:19 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 14:06 发表
%* 和 %@ 不能直接在 MESS 里面用吗?显示出来都只有一个 % 就没了,用 SET 赋值给另外一个变量就可以 MESS 显示了。


MSTR 和 LPOS*** 的 -delims 如何用呢?比如我要同时指定空格、换行、制表、单引号、双 ...


只能选一种 分割符。
可以 分割后换个分割符号 再分割。

省事的方法是, 先用 SED 将串中的其他分割符 换成统一分隔符。 再来。
  1. SET &S0=121 AA "BB CC XZ" EE 122:222|3333+44444[55]66(77)88
  2. SED &S1=0:,[:|+()\[\]], ,%S0%
  3. MSTR a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13=<1*>%S1%
  4. MESS [%S1%] \n[%a1%] [%a2%] [%a3%] [%a4%] [%a5%] [%a6%] [%a7%] [%a8%] [%a9%] [%a10%] [%a11%] [%a12%] [%a13%]
复制代码

//[121 AA "BB CC XZ" EE 122 222 3333 44444 55 66 77 88]
//[121] [AA] ["BB CC XZ"] [EE] [122] [222] [3333] [44444] [55] [66] [77] [88] []

[ 本帖最后由 mdyblog 于 2013-3-30 15:18 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 15:14:36 | 显示全部楼层
用SED处理了。

THREAD 换成 THREAD* 也试过了,到第3层嵌套 LOAD 的 INI 里面就不行了,线程不会被创建,奇怪了。是不是 主线程退出得太快了?
回复

使用道具 举报

 楼主| 发表于 2013-3-30 15:25:32 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 15:14 发表
用SED处理了。

THREAD 换成 THREAD* 也试过了,到第3层嵌套 LOAD 的 INI 里面就不行了,线程不会被创建,奇怪了。是不是 主线程退出得太快了?


试试这个。
运行 PECMD.INI
再看看 X.LOG
  1. [LOGS *X.LOG] <0>:操作成功完成。
  2. [THREAD* LOAD P11.INI] <0>:操作成功完成。
  3. [THREAD* LOAD P12.INI] <0>:操作成功完成。
  4. [THREAD* LOAD P111.INI] <0>:操作成功完成。
  5. [THREAD* LOAD P112.INI] <0>:操作成功完成。
  6. [THREAD* LOAD P121.INI] <0>:操作成功完成。
  7. [THREAD* LOAD P122.INI] <0>:操作成功完成。
  8. [MESS D:\MDY\DESKTOP\T\P121.INI] <0>:操作成功完成。
  9. [LOAD P121.INI] <0>:操作成功完成。
  10. [MESS D:\MDY\DESKTOP\T\P122.INI] <0>:操作成功完成。
  11. [LOAD P122.INI] <0>:操作成功完成。
  12. [LOAD P12.INI] <0>:操作成功完成。
  13. [MESS D:\MDY\DESKTOP\T\P112.INI] <0>:操作成功完成。
  14. [LOAD P112.INI] <0>:操作成功完成。
  15. [MESS D:\MDY\DESKTOP\T\P111.INI] <0>:操作成功完成。
  16. [THREAD* LOAD P1111.INI] <0>:操作成功完成。
  17. [THREAD* LOAD P1112.INI] <0>:操作成功完成。
  18. [MESS D:\MDY\DESKTOP\T\P1112.INI] <0>:操作成功完成。
  19. [LOAD P1112.INI] <0>:操作成功完成。
  20. [MESS D:\MDY\DESKTOP\T\P1111.INI] <0>:操作成功完成。
  21. [LOAD P1111.INI] <0>:操作成功完成。
  22. [LOAD P111.INI] <0>:操作成功完成。
  23. [LOAD P11.INI] <0>:操作成功完成。
  24. [LOAD P1.INI] <0>:操作成功完成。
  25. [LOGS ] <0>:操作成功完成。
复制代码

Thread-嵌套测试.zip

1.48 KB, 下载次数: 12

回复

使用道具 举报

发表于 2013-3-30 15:59:00 | 显示全部楼层
忘了还有日志,我打开日志看看,实际用的配置文件还有很多其他命令,我先看看怎么回事。

IMPORT 命令可以在配置文件中段或者末尾使用吗?有没有就地展开包含外部文件的用法?
回复

使用道具 举报

 楼主| 发表于 2013-3-30 16:05:10 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 15:59 发表
忘了还有日志,我打开日志看看,实际用的配置文件还有很多其他命令,我先看看怎么回事。

IMPORT 命令可以在配置文件中段或者末尾使用吗?有没有就地展开包含外部文件的用法?


IMPORT 可以放在任何地方。
IMPORT  正是 就地展开包含的外部文件


甚至可以在一个函数的内部。 包含的文件就是该函数的一部分。
甚至一个函数 可以在 可以分成多个部分, 放到不同文件中。 包含的文件就是该函数的一部分。
当然一般不要这么邪乎。

IMPORT  是在加载的时候处理的; 在内存中生成一个新文件。 不涉及 函数结构, 运行逻辑。

[ 本帖最后由 mdyblog 于 2013-3-30 16:08 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 16:11:17 | 显示全部楼层
因为说明里写 IMPORT 要放在文件开头使用,所以一直都是在文件头部用的。

打开日志查过了,嵌套在里面的一些 THREAD* LOAD 是显示成功执行了,但是被 LOAD 的 INI 里面的代码完全没有被执行到,不知道什么原因。是用的机器是单核单线 CPU 的原因么?
回复

使用道具 举报

发表于 2013-3-30 16:28:12 | 显示全部楼层
FIND KEY=CONTROL,EXIT LOOP
这个检测按住 Ctrl 键的,日志里怎么说参数错误?后面的VK列表里有 VK_CONTROL 的值,不过没有左右区分。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 16:36:23 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 16:11 发表
因为说明里写 IMPORT 要放在文件开头使用,所以一直都是在文件头部用的。

打开日志查过了,嵌套在里面的一些 THREAD* LOAD 是显示成功执行了,但是被 LOAD 的 INI 里面的代码完全没有被执行到,不知道什么原 ...


你运行一下我上面给你的 Thread-嵌套测试.zip, 就知道了。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 16:39:39 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 16:28 发表
FIND KEY=CONTROL,EXIT LOOP
这个检测按住 Ctrl 键的,日志里怎么说参数错误?后面的VK列表里有 VK_CONTROL 的值,不过没有左右区分。

VK_CONTROL  没有左右区分
左右区分VK_LCONTROL  VK_RCONTROL

[FIND KEY=VK_CONTROL,EXIT LOOP] <0>:操作成功完成。
[FIND KEY=VK_LCONTROL,EXIT LOOP] <0>:操作成功完成。
[FIND KEY=VK_RCONTROL,EXIT LOOP] <0>:操作成功完成。
回复

使用道具 举报

发表于 2013-3-30 16:41:55 | 显示全部楼层
不是说可以省掉 VK_ 吗?我加上试试。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 16:44:44 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 16:41 发表
不是说可以省掉 VK_ 吗?我加上试试。

尤的命令里可以。

FIND 是很早期写的。 没有那么强。

[ 本帖最后由 mdyblog 于 2013-3-30 16:58 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 16:58:09 | 显示全部楼层
完全搞不懂PECMD做什么用的,好像个命令行解释器,似乎很强大,也能在WINDOWS下用
回复

使用道具 举报

 楼主| 发表于 2013-3-30 17:11:32 | 显示全部楼层

回复 #5372 2010qaqz111 的帖子

PECMD2012.1.75.1-130314-21.多窗口线程孵化版_win32_64.sfx
FIND  VK_ 可省


[FIND KEY=LCONTROL,TEAM MESS LCONTROL| EXIT LOOP] <0>:操作成功完成。
[FIND KEY=RCONTROL,TEAM MESS RCONTROL| EXIT LOOP] <0>:操作成功完成。
[FIND KEY=CONTROL, TEAM MESS CONTROL| EXIT LOOP] <0>:操作成功完成。

[ 本帖最后由 mdyblog 于 2013-3-30 17:15 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2013-3-30 17:14:50 | 显示全部楼层
原帖由 快雪时晴 于 2013-3-30 16:58 发表
完全搞不懂PECMD做什么用的,好像个命令行解释器,似乎很强大,也能在WINDOWS下用


对头, 就是 命令行解释器。
在windows 下用的。 方便 写一点 带图形的 小程序。
目前 用的最多的是用来启动 WINPE(非常小的windowsXP、2003、WIN7、WIN8)
回复

使用道具 举报

发表于 2013-3-30 18:27:46 | 显示全部楼层
THREAD LOAD 好像是文件访问的问题,可惜 LOGS 的信息不够详细,我再试试。

[ 本帖最后由 2010qaqz111 于 2013-3-30 18:56 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 18:30:21 | 显示全部楼层
原帖由 mdyblog 于 2013-3-30 17:11 发表
PECMD2012.1.75.1-130314-21.多窗口线程孵化版_win32_64.sfx
FIND  VK_ 可省


[FIND KEY=LCONTROL,TEAM MESS LCONTROL| EXIT LOOP] :操作成功完成。
[FIND KEY=RCONTROL,TEAM MESS RCONTROL| EXIT LOOP]  ...


IFEX 也可以用来检测按键吗?我看到 IFEX 和 FIND 的说明里都有 KEY= 的用法。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 19:19:28 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 18:30 发表


IFEX 也可以用来检测按键吗?我看到 IFEX 和 FIND 的说明里都有 KEY= 的用法。

可以。 实际是一样的。
内部IFEX  FIND  是一个函数。 很多一样或类似。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 19:22:15 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 18:27 发表
THREAD LOAD 好像是文件访问的问题,可惜 LOGS 的信息不够详细,我再试试。

写成函数

_SUB ThreadLoad
   @SET &cmd=THREAD*   LOAD  %*
   %&cmd%
_END

ThreadLoad "ABC.INI"  aa bb cc
回复

使用道具 举报

 楼主| 发表于 2013-3-30 20:04:07 | 显示全部楼层

LOOP 支持单操作数

LOOP 支持单操作数, 比较符和第二参数可省。
循环条件: 格式为  [$|#]变量1[<比较符>变量2]


1: LOOP #整数, 命令
2: LOOP 浮点数, 命令
  非0即为真
如 LOOP #1,  wait 100  //真
   LOOP  1,  wait 100  //真
如 LOOP #-1, wait 100  //真
   LOOP  -1, wait 100  //真
如 LOOP #0,  wait 100  //假

   LOOP  0,  wait 100  //假

3: LOOP $字串, 命令
字串非空即为真
LOOP $A, wait 100   //真
LOOP $,  wait 100   //假

[ 本帖最后由 mdyblog 于 2013-3-30 20:06 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 20:59:25 | 显示全部楼层
THREAD* LOAD 之前加了 LOOP IFEX 等待文件也有问题,时行时不行的,肯定是多线程同步上的问题,但是又不知道是什么原因。

LOOP 的条件能够像 IFEX 一样判断文件存在吗?这样等待文件的循环写起来就能简洁一点了。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 21:09:06 | 显示全部楼层

回复 #5382 2010qaqz111 的帖子

算了吧。 这种用法 太罕见了。

你建的文件 在 %SystemRoot%\System32\下吗? 系统是64位的吗?
64位 的话, 还是用 64位PECMD试试。



LOAD 前等一下, 可能文件内容还没完成, 此时文件为空,或不全。
_SUB  ThreadCheckLoad
    SET &cmd=THREAD* CALL  ThreadCheckLoadReal %*
    %&cmd%
_END

_SUB ThreadCheckLoadReal   //线程中等待
    SET &file=%~1
    SET &cmd=LOAD %*
    LOOP 1,
    {
        IFEX %&file%, EXIT LOOP

        WAIT 100
    }
    WAIT 500 //等等
    WAIT 500 //等等, 自己调调
    //WAIT 500 //等等, 自己调调
    %&cmd%

_END

ThreadCheckLoad  "D:\upload\aa.ini"  aa bb cc



[ 本帖最后由 mdyblog 于 2013-3-30 21:19 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 21:19:38 | 显示全部楼层
建的文件不在 system32 下,在系统目录之外的一个普通路径,32位的 WIN8PE。

这一段代码:
LOOP #1=1,
{   IFEX DRV_VGA.INI,EXIT LOOP
    WAIT 200
}
THREAD* TEAM {LOAD DRV_VGA.INI|FILE DRV_VGA.INI}

从 LOG 的记录看,IFEX 检测到文件退出了 LOOP,LOOP 返回<0>,然后 LOAD 成功,返回<0>,但是 INI 里的内容没有被执行,再然后紧接的下一条 LOG 就是 FILE 返回<2>:找不到文件。
有可能是磁盘系统的后写缓存之类的原因,但是如果不用 THREAD 的话直接 LOAD 是一定可以的。


如果把多行命令的一个 INI 的文件内容读入一个 PE 变量,可以用 LOAD 加载运行么?
比如要新开一个线程来运行,或者直接重新启动一个 PECMD 用 LOAD 来加载运行?

用 LOAD 加载是因为想传参数,如果直接把变量名写死到 INI 里面的话,INI 的适用性就变差了。

因为 FBINST 可以用 cat 命令直接把文本文件输出到 stdout,这样可以用 EXEC* 直接放到 PE 变量里面。

[ 本帖最后由 2010qaqz111 于 2013-3-30 21:41 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 22:07:51 | 显示全部楼层

回复 #5383 mdyblog 的帖子

CLONECD大侠的一键恢复遇到PECMD多线程难题了,
快看看
http://bbs.wuyou.net/forum.php?m ... page=100#pid2734116
回复

使用道具 举报

发表于 2013-3-30 22:43:23 | 显示全部楼层
这种等文件到位的方法随机性太强了不稳定,如果是 ud 区里脚本的话,我在考虑用 EXEC* 截获输出放到 PE 变量里面加载的办法,如果是磁盘文件应该也是可以的,等下有眉目了我 PO 上来。
回复

使用道具 举报

发表于 2013-3-30 22:54:53 | 显示全部楼层

回复 #5388 2010qaqz111 的帖子

的确,刚试用
http://bbs.wuyou.net/forum.php?m ... page=101#pid2734148
中附件,成功了一次,后来很难再现
回复

使用道具 举报

 楼主| 发表于 2013-3-30 23:20:09 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 21:19 发表
建的文件不在 system32 下,在系统目录之外的一个普通路径,32位的 WIN8PE。

这一段代码:

从 LOG 的记录看,IFEX 检测到文件退出了 LOOP,LOOP 返回,然后 LOAD 成功,返回,但是 INI 里的内容没有被执行 ...



1: 如我楼上所说, 在 LOAD 前 WAIT 1000 试试。

2》如果把多行命令的一个 INI 的文件内容读入一个 PE 变量,可以用 LOAD 加载运行么?
可以的。

SET &Cmd=MESS %%* @ #OK    //脚本存入PE变量&cmd中,支持多行

LOAD **mem &Cmd  1 2 3 4 5     //**mem 方式运行
//结果【1 2 3 4 5】


//还可以这样 多进程方式
EXEC --clone:&Cmd  --exe:"%MyName%" 1 2 3 4 5 6   //--clone:方式 执行, 可以带参数。 这是多进程方式

//结果【1 2 3 4 5】

[ 本帖最后由 mdyblog 于 2013-3-31 08:57 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 23:32:38 | 显示全部楼层
EXEC --clone:&Cmd  --exe:"%MyName%" PECMD load dumy.ini  1 2 3 4 5 6

--exe:后面的参数在说明里说可以指定一个exe,那就是说后面 “PECMD load dumy.ini  1 2 3 4 5 6” 命令行部分的 “PECMD” 实际上只是一个占位的作用了,不管这里填什么文件名实际上加载的都是 --exe 指定的那个文件作为一个exe来加载运行,是这样吗?

--clone:变量名
这个开关说明里说是克隆一个pecmd来运行变量中的脚本,那是否后面命令行部分的前3个实际上就已经重定向为:
PECMD -> 不管写啥,实际上是又运行了一个当前进程?
load -> 不管写啥,都是给新克隆进程发送一个 LOAD 命令?
dummy.ini -> 不管写啥,都是将 LOAD 要加载的文件重定向到了 变量名 的内容?

不知道是否这样理解的。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 23:32:56 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 22:43 发表
这种等文件到位的方法随机性太强了不稳定,如果是 ud 区里脚本的话,我在考虑用 EXEC* 截获输出放到 PE 变量里面加载的办法,如果是磁盘文件应该也是可以的,等下有眉目了我 PO 上来。

>> 这种等文件到位的方法随机性太强了不稳定,


可以考虑 不用 Fbinst  导出文件。
用 Fbinst  提取目录后, 再用 PUTF -dd 直接 导出文件, 这样完成时,文件一定导完毕了,就不用等了。
回复

使用道具 举报

 楼主| 发表于 2013-3-30 23:43:21 | 显示全部楼层
原帖由 2010qaqz111 于 2013-3-30 23:32 发表
EXEC --clone:&Cmd --exe:"%MyName%" PECMD load dumy.ini 1 2 3 4 5 6
--exe:后面的参数在说明里说可以指定一个exe,那就是说后面 “PECMD load dumy.ini 1 2 3 4 5 6” 命令行部分的 “PECMD” 实际上只是一个占位的作用了,不管这里填什么文件名实际上加载的都是 --exe 指定的那个文件作为一个exe来加载运行,是这样吗?

对的。
(1) 实际上加载的都是 --exe 指定的那个文件作为一个exe来加载运行
(2) PECMD 基本上只是占位作用。%0 就是它, 一般不用%0
      同时, 进程管理器中命令行中,最开始部分就是这个PECMD
        由于马上执行了LOAD 这个PECMD实际看不到, %0 为 dumy.ini


--clone:变量名
这个开关说明里说是克隆一个pecmd来运行变量中的脚本,那是否后面命令行部分的前3个实际上就已经重定向为:
PECMD -> 不管写啥,实际上是又运行了一个当前进程?
load -> 不管写啥,都是给新克隆进程发送一个 LOAD 命令?
dummy.ini -> 不管写啥,都是将 LOAD 要加载的文件重定向到了 变量名 的内容?

(1) 对, PECMD -> 不管写啥,实际上是又克隆了一个进程。
(2) 对, dummy.ini -> 不管写啥, LOAD 要加载的内容 为  变量的内容(不通过临时文件中介,而是完全通过内存完成)。 此时 %0就是dummy.ini .




[ 本帖最后由 mdyblog 于 2013-3-30 23:45 编辑 ]
回复

使用道具 举报

发表于 2013-3-30 23:48:53 | 显示全部楼层
PUTF -dd 可以搞到 ud 区的文件?那 GETF 应该也能直接从 ud 读文件到内存吧?

是否这样:
比如 ud 区对应的磁盘用 fbinst --list 看到的序号是 (hd1),fbinst (hd1) info 输出的目录项:
  1e   "MINIPE/BOOT.INI" 0x9055 282 (2013-03-23 12:29:35)

读内容到变量的命令是否这样写:
GETF \\.\PhysicalDrive1,0x9055S#282,&&TEXT
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-10 14:27

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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