无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3245|回复: 12

[求助] 求一段PECMD2012代码

[复制链接]
发表于 2017-2-19 21:26:42 | 显示全部楼层 |阅读模式
  1. EXEC* &A=cmd /C ipconfig /all
  2. THREAD* CALL BBB

  3. _SUB BBB
  4. FORX *NL &A,&B,
  5. {
  6. FIND $%&B%<>,MESS %&B%
  7. }
  8. _END
  9. MESS CCC
复制代码



如上,怎么能让 MESS CCC在上面所有线程运行都结束之后再执行?
发表于 2017-2-19 21:36:15 来自手机 | 显示全部楼层
这问题我也遇到过,你开了线程,应该没办法!

点评

高手应该有办法。  详情 回复 发表于 2017-2-19 21:44
回复

使用道具 举报

 楼主| 发表于 2017-2-19 21:44:41 | 显示全部楼层
huaqingyuan 发表于 2017-2-19 21:36
这问题我也遇到过,你开了线程,应该没办法!

高手应该有办法。
回复

使用道具 举报

发表于 2017-2-19 21:52:45 | 显示全部楼层
本帖最后由 1400700226 于 2017-2-19 21:56 编辑

不可以加用户或者系统环境变量作判断依据吗?


ipconfig是否结束可以用nircmd waitprocess?

点评

看不懂。。。  详情 回复 发表于 2017-2-19 22:35
回复

使用道具 举报

 楼主| 发表于 2017-2-19 22:35:42 | 显示全部楼层
1400700226 发表于 2017-2-19 21:52
不可以加用户或者系统环境变量作判断依据吗?

看不懂。。。

点评

我根本不会所以说的不准确 在新开的进程执行的操作最后加一条设置系统环境变量的命令,不就可以判断是否完成了? nircmd的用法在  详情 回复 发表于 2017-2-20 00:17
回复

使用道具 举报

发表于 2017-2-20 00:17:19 | 显示全部楼层
本帖最后由 1400700226 于 2017-2-20 00:23 编辑


我根本不会所以猜的不准确

在新开的线程执行的操作最后加一条设置系统环境变量的命令,不就可以判断是否完成了?

nircmd的用法在nirsoft.net
回复

使用道具 举报

发表于 2017-2-20 00:31:06 | 显示全部楼层
本帖最后由 1400700226 于 2017-2-20 00:37 编辑

EXEC* &A=cmd /C ipconfig /all
THREAD* CALL BBB

_SUB BBB
FORX *NL &A,&B,
{
FIND $%&B%<>,MESS %&B%
}
envi ifend
envi $ifend=yes
_END

exec =nircmd waitprocess ipconfig.exe
find $%ifend%=yes,MESS CCC!call waitit

_sub waitit
wait 100
find $%ifend%=yes,MESS CCC!call waitit
_end


纯属瞎猜

因为我看不懂pecmd2012的解说

点评

这样干下去应该死循环了。  详情 回复 发表于 2017-2-20 00:59
回复

使用道具 举报

发表于 2017-2-20 00:50:08 | 显示全部楼层
微软是有api(WaitForSingleObject,还有其他)可以等待线程结束再继续,就看pecmd有没有类似功能了。
或者
THREAD* CALL BBB
后面跟一个循环判断一个值。成立再继续否则一直循环。这个值就由 bbb内部执行完改值。
---
pecmd脚本不熟。

点评

貌似不太好办。。。  详情 回复 发表于 2017-2-20 00:59
回复

使用道具 举报

 楼主| 发表于 2017-2-20 00:59:18 | 显示全部楼层
本帖最后由 红毛樱木 于 2017-2-20 01:07 编辑
1400700226 发表于 2017-2-20 00:31
EXEC* &A=cmd /C ipconfig /all
THREAD* CALL BBB


这样干下去应该死循环了。
变量传不到主线程上,不过,这是个思路,可以试试

点评

哪里啊,设置的是系统变量,不是进程或者线程变量啊。  详情 回复 发表于 2017-2-20 01:39
回复

使用道具 举报

 楼主| 发表于 2017-2-20 00:59:36 | 显示全部楼层
yjd 发表于 2017-2-20 00:50
微软是有api(WaitForSingleObject,还有其他)可以等待线程结束再继续,就看pecmd有没有类似功能了。
或 ...

貌似不太好办。。。
回复

使用道具 举报

发表于 2017-2-20 01:39:30 | 显示全部楼层
红毛樱木 发表于 2017-2-20 00:59
这样干下去应该死循环了。
变量传不到主线程上,不过,这是个思路,可以试试

哪里啊,设置的是系统变量,不是进程或者线程变量啊。
回复

使用道具 举报

发表于 2017-2-20 08:31:13 | 显示全部楼层
方案一:

  1. EXEC* &A=cmd /C ipconfig /all
  2. THREAD* CALL BBB

  3. _SUB BBB
  4. FORX *NL &A,&B,
  5. {
  6.   FIND $%&B%<>,MESS %&B%
  7. }
  8. _END

  9. WAIT *=%&&__LastTID%     //老娘在这把关,谁敢过去?嗯?
  10. MESS CCC
复制代码




方案二:

  1. EXEC* &A=cmd /C ipconfig /all
  2. EXEC -pid:pid %myname% WAIT *%&__PID%
  3. THREAD* CALL BBB

  4. _SUB BBB
  5. FORX *NL &A,&B,
  6. {
  7.   FIND $%&B%<>,MESS %&B%
  8. }
  9. KILL *%pid%
  10. _END

  11. WAIT *%pid%    //等我儿子,你们别乱来
  12. MESS CCC
复制代码




方案三:

  1. EXEC* &A=cmd /C ipconfig /all
  2. CALL A

  3. _SUB A,#
  4. //DO something 这里干点坏事
  5. THREAD* CALL BBB
  6. _END

  7. _SUB BBB
  8. FORX *NL &A,&B,
  9. {
  10.   FIND $%&B%<>,MESS %&B%
  11. }
  12. KILL \     //干完收工
  13. _END

  14. MESS CCC
复制代码



不谢

点评

高手!原来exec*就是等待完成的。  详情 回复 发表于 2017-2-20 15:08
回复

使用道具 举报

发表于 2017-2-20 15:08:12 | 显示全部楼层

高手!原来exec*就是等待完成的。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 17:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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