无忧启动论坛

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

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

    [复制链接]
31#
发表于 2019-3-1 23:01:43 来自手机 | 显示全部楼层
红毛樱木 发表于 2019-3-1 20:21
确实是的,%&V%变量的内容大小有限制,超过了就崩溃,看来是个BUG。

谢谢红大,自己写了个小脚本解决了,26个字母依次替换: sed -eⅹ &V=0,a,A,&V
回复

使用道具 举报

32#
发表于 2019-3-1 23:02:43 来自手机 | 显示全部楼层
红毛樱木 发表于 2019-3-1 21:58
这种情况你应该这样用了

又学了一种方法,谢谢
回复

使用道具 举报

33#
发表于 2019-3-12 10:26:26 | 显示全部楼层
mdyblog 发表于 2018-8-6 23:50
WAIGO_Win10_8.1_XP_ALL_PE-G4D改04Full.ISO.part*.rar (44个) 上传中。 https://www.lanzous.com/b331 ...

MESS+icon**shell32.dll#120 你好   //图标失效,出不来了

点评

我试了好几个版本,貌似都不行。。。。以前有可以这样用的版本吗?  详情 回复 发表于 2019-3-13 13:42
回复

使用道具 举报

34#
发表于 2019-3-13 19:08:37 来自手机 | 显示全部楼层
红毛樱木 发表于 2019-3-13 13:42
我试了好几个版本,貌似都不行。。。。以前有可以这样用的版本吗?

我用了16年的版本,也不行,估计很早就取消了吧,但是帮助文件那还有这种用法。
回复

使用道具 举报

35#
发表于 2019-3-21 17:21:28 | 显示全部楼层
红毛樱木 发表于 2019-3-18 13:18
这里
&::a和&a看上去是两个单独的变量了,无任何关系了。是不是和说明书里的全局变量有点矛盾了。


供参考,说明书上说:

[&&V] --- 本级PE变量 --- 引用办法: [%&&V%]
[&V]   --- 上级PE变量 --- 引用办法: [%&V%]    ---当本级PE变量存在,其实际值被屏蔽,实际为本级PE变量的值.
[&::V] --- 全局PE变量 --- 引用办法: [%&::V%]

SET &::V=全局PE
SET &V=上级PE
CALL TEST

_SUB TEST
//SET &V=本级PE
MESS  &&V 的值为 [%&&V%]\n\n  &V 的值为 [%&V%]\n\n&::V 的值为 [%&::V%]
_END

点评

你试试这个 ENVI &::V=全局PE ENVI &V=上级PE CALL TEST _SUB TEST ENVI &&V=本级PE MESS &&V 的值为 [%&&V%]\n\n &V 的值为 [%&V%]\n\n&::V 的值为 [%&::V%] _END  详情 回复 发表于 2019-3-22 12:38
回复

使用道具 举报

36#
发表于 2019-3-22 14:56:26 | 显示全部楼层
本帖最后由 datbik189 于 2019-3-22 15:24 编辑
红毛樱木 发表于 2019-3-22 12:38
你试试这个

ENVI &::V=全局PE



从测试代码看来全局PE变量就是文件0级PE变量(没有则创建),"ENVI &V=上级PE变量"可以改变上级PE变量的值(上级PE变量不存在则退出)
%&V%的值有三种可能,优先级为%&&V%(本级PE变量存在时)>%&V%(上级PE变量存在时)>%&::V%.




ENVI &::V=全局PE     //全局PE变量
ENVI &V=文件0级PE    //文件0级PE变量
ENVI &&V=文件1级PE   //文件1级PE变量
CALL TEST
MESS  &&V 的值为 [%&&V%]\n\n  &V 的值为 [%&V%]\n\n&::V 的值为 [%&::V%]@MESS在文件1级

_SUB TEST
ENVI &&V=文件2级PE //文件2级PE变量
MESS  &&V 的值为 [%&&V%]\n\n  &V 的值为 [%&V%]\n\n&::V 的值为 [%&::V%]@MESS在文件2级
_END
回复

使用道具 举报

37#
发表于 2019-3-22 16:05:54 | 显示全部楼层
本帖最后由 datbik189 于 2019-3-22 17:20 编辑
红毛樱木 发表于 2019-3-22 12:38
你试试这个

ENVI &::V=全局PE


测试了不少代码,得出了以下结论,不知对不对.

原理只有程序作者M大最清楚了.

ENVI &&V=设置本级PE变量   //等价于SET &V=设置本级PE变量
ENVI &V=设置上级PE变量    //等价于SET V=设置上级PE变量
ENVI &::V=设置全局PE变量  //等价于SET &::V=设置全局PE变量

"ENVI &V=设置上级PE变量" 修改上级同名PE变量的值;如果无上级同名PE变量,修改本级同名PE变量;如果上层某级存在该级PE同名变量,修改该级PE同名变量. (只修改一次本级或往上某级的同名PE变量)

%&V%的值有3种可能,优先级: [本级PE变量]>[上级PE变量]>[全局PE变量]

点评

ENVI &&V等价于SET &V  详情 回复 发表于 2019-3-22 18:03
回复

使用道具 举报

38#
发表于 2019-6-24 09:36:49 | 显示全部楼层
红毛樱木 发表于 2019-6-11 21:51
能不能在内存中写一个
_SUB A
_END

这个支持的.
ENVI^ ENVIMODE=1
SET$ &NL=D A
SET &V=
\MESS. A
\%&NL%MESS. B
//函数去掉头部 _SUB 和尾部 _END
CALL --MEM &V

点评

感谢,感谢,十分感谢。  发表于 2019-6-24 14:14
回复

使用道具 举报

39#
发表于 2019-7-10 21:25:24 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-10 16:38
问一下
forx *nl
操作多行变量时,多行变量必须 用 envi. &变量名 方式赋值么?可以用 多行文本框么? ...

环境变量的值限制在7K以下,PE变量(带&)无限制,用了这么久未发现有问题。贴上你的有问题的脚本,大家测试下就清楚了。

点评

好像跟 带& 变量的使用有关,只在我的环境 特定系统的特定 点上有问题。很是奇怪。 windows 10 环境下, 在ini 中其他 sub 中用到 &, 在用 exec* @edit 传递 diskpart 输出结果时 pecmd卡死。 把 @edit 去掉,不  详情 回复 发表于 2019-7-10 21:56
回复

使用道具 举报

40#
发表于 2019-7-10 22:08:07 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-10 21:56
好像跟 带& 变量的使用有关,只在我的环境 特定系统的特定 点上有问题。很是奇怪。
windows 10 环境下, ...

没有问题脚本测试,说不清楚。

一般获取信息的命令为:
EXEC* &V=*DISKPART.EXE 参数表 或 EXEC* &V=*CMD.EXE /C DISKPART.EXE 参数表

点评

脚跟已经上传 难道是我用 exec* @edit=!cmd /c diskpart 用的是 ! 而不是 * 导致的?  详情 回复 发表于 2019-7-10 22:17
回复

使用道具 举报

41#
发表于 2019-7-10 22:12:39 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-10 21:56
好像跟 带& 变量的使用有关,只在我的环境 特定系统的特定 点上有问题。很是奇怪。
windows 10 环境下, ...

晕,有没有重现问题的最简短的脚本,那么多,眼花完了

点评

简单的不出这毛病,我用 pecmd 给diskpart 做的外壳,也是这么大代码量的ini 也没出这毛病。  详情 回复 发表于 2019-7-10 22:28
回复

使用道具 举报

42#
发表于 2019-7-10 22:20:32 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-10 22:17
脚本已经上传
难道是我用 exec* @edit=!cmd /c diskpart
用的是 ! 而不是 * 导致的?


exec* @edit=!cmd /c diskpart 变成 exec* &edit=*cmd /c diskpart, 再看看。现在不在电脑前,明天看看

点评

好的,我也得明天才能在那个 特殊的问题环境 测试。  详情 回复 发表于 2019-7-10 22:26
回复

使用道具 举报

43#
发表于 2019-7-10 22:40:48 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-10 22:28
简单的不出这毛病,我用 pecmd 给diskpart 做的外壳,也是这么大代码量的ini 也没出这毛病。

应该是那个@的问题,我从没使用过这种方法
回复

使用道具 举报

44#
发表于 2019-7-11 08:25:21 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-11 07:52
就单单  run_diskpart 段 有这个问题,


不知道怎么测试, 脚本运行没问题,帮不上忙.

建议脚本开头加上 ENVI^ ENVIMODE=1
这个才是PECMD2012的标准模式, 不加好像会有莫名的未知问题.

调试时在脚本开头加上 LOGS --2 *XX.LOG

点评

谢谢  详情 回复 发表于 2019-7-11 09:12
回复

使用道具 举报

45#
发表于 2019-7-11 12:37:01 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-11 10:58
pecmd 有办法 向 某个进程传递指令么?
比如


pecmd没有这么厉害吧。

是不是可以,ExEc* @V=*cmd.exe /c a.bat,a.bat内容是无限循环,满足一定条件就call b.bat,否则什么也不干. b.bat里面就是你要传递的指令,用Writ命令修改其内容。

点评

vbs 有 输入输出 接管的。 我以为 pecmd 2012 也有呢,这个主要考虑是 用到 diskpart 上,因为 有的电脑 频繁调用 diskpart 会很烦,很慢。 所以我想的就是 隐藏调用一个 Diskpart ,就放在那里 挂着,需要用 disk  详情 回复 发表于 2019-7-11 14:55
回复

使用道具 举报

46#
发表于 2019-7-11 15:03:37 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-11 17:55 编辑

重复了...
回复

使用道具 举报

47#
发表于 2019-7-11 17:54:59 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-11 14:55
vbs 有 输入输出 接管的。
我以为 pecmd 2012 也有呢,这个主要考虑是 用到 diskpart 上,因为 有的电脑 ...

logs --2 * xx.log
envi^ envimode=1
call @cmd_win
_Sub cmd_win,h280 w400 ,cmd,kill *%cmdpid%
      edit-| cmd_edit, L10 t10 h180 w380,,,0x220
      set &cmd=for /l %%i in (1,0,1) do @"%myname%" wait 500&call b.bat
      item cmd_but,  L20 t200 h20 w50,cmd,exec* -io -pid:cmdpid @cmd_edit=*cmd.exe /c %&cmd%
_end

b.bat内容可为:
(echo sel disk 0&echo list partition)|diskpart
::没有exit命令, diskpart就常驻内存,再次运行就飞快
或者 diskpart /s script.txt
@del %0>nul

点评

感觉这样不是真的 留有 一个diskpart 进程,diskpart 会随着call b.bat 而被多次调用。 可以探测下 diskpart 的进程号,是在变化的。 之所以再次运行 快了,是因为 diskpart 运行过一次,第二次就会快一些。  详情 回复 发表于 2019-7-11 23:51
回复

使用道具 举报

48#
发表于 2019-7-17 10:47:25 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-17 10:50 编辑

重复了...
回复

使用道具 举报

49#
发表于 2019-7-17 10:51:26 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-17 11:25 编辑
dos时代菜鸟 发表于 2019-7-11 23:51
感觉这样不是真的 留有 一个diskpart 进程,diskpart 会随着call b.bat 而被多次调用。

可以探测下 di ...


感觉这样调用最好, 因为你不知道diskpart运行每一条命令所需的时间.

exec* &V=*diskpart.exe /s script.txt 获取回显是在diskpart 运行结束之后.

查看了一下论坛以前的记录, 向挂起的diskpart.exe发送一条命令的脚本为:

ENVI @@SENDMSG=窗口ID号;0x102;宽字符(16进制)

测试脚本通过,没问题.

先运行sel disk 0 和 运行 list partition



后运行 list volume



logs --2 * xx.log
envi^ envimode=1
thread -here -tid:&A call @cmd_win
_Sub cmd_win,h280 w400 ,cmd,kill *%cmdpid%
      edit-| cmd_edit, L10 t10 h180 w380,,,0x220
      item cmd_but,  L20 t200 h20 w50,cmd,exec* -io -pid:cmdpid @cmd_edit=*diskpart
_end
loop #1=1,find diskpart.exe,exit loop!wait 500
wait 1000
set &V1=%cmdpid%
find --wid*@. &V
load #999*命令_find.exe &V 匹配 &V1
team mstr * &wid=<2>&V|calc -base=16 &wid=%&wid%
set. &ch=sel disk 0\nlist partition\n
load #999*命令_宽字符 &ch
forx * %&ch%,&v1,ENVI @@SENDMSG=%&WID%;0x102;0x%&V1%
wait 500
mess. %cmd_edit%
set. &ch=list volume\n
load #999*命令_宽字符 &ch
forx * %&ch%,&v1,ENVI @@SENDMSG=%&WID%;0x102;0x%&V1%
wait 50
mess. %cmd_edit%
wait *=%&A%

PECMD.EXE

1.01 MB, 下载次数: 16, 下载积分: 无忧币 -2

点评

这个好。必须学会。  详情 回复 发表于 2019-7-17 12:12
牛!还能这么玩的啊,学习了。  详情 回复 发表于 2019-7-17 12:01
回复

使用道具 举报

50#
发表于 2019-7-17 12:37:53 来自手机 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-17 12:41 编辑
dos时代菜鸟 发表于 2019-7-17 12:12
这个好。必须学会。

load #999*命令_宽字符 &ch


附件中的PECMD中的命令块,内置在ScriPt下序号999
参考 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=414172
回复

使用道具 举报

51#
发表于 2019-7-17 12:47:48 来自手机 | 显示全部楼层
527104427 发表于 2019-7-17 12:01
牛!还能这么玩的啊,学习了。


汗,这是M大很早以前给出的示范脚本,我只是搬运工
回复

使用道具 举报

52#
发表于 2019-7-17 18:53:07 来自手机 | 显示全部楼层
527104427 发表于 2019-7-17 18:36
看了一下,这个方法就是挨个把字母转换成按键编码,再挨个发送给diskpart
前提是得把所有英文字母的十六 ...

手上没有WIN7,无法测试。

如果diskpart不能常驻内存,这个脚本就没有意义了。

关于字符串,支持汉字,可以直接输入,自己转化成宽字符,不需要查询按键的额外工作
回复

使用道具 举报

53#
发表于 2019-7-17 21:43:28 来自手机 | 显示全部楼层
红毛樱木 发表于 2019-7-17 21:29
/s就不在后台了吧。不带/s我试了可以。

5大测试了14309楼的PECMD和代码,Win7的系统diskpart不能挂着和常驻内存,方便的话麻烦试下,发Log上来。
回复

使用道具 举报

54#
发表于 2019-7-18 11:36:12 | 显示全部楼层
Anson4 发表于 2019-7-18 09:45
请教老司机:PECMD有什么指令能用来处理文本文件的字符串(查找和替换)?

我查看了帮助,WIRT 可以 ...


sed-替换命令  writ-修改文本命令

logs *xx.log
envi^ envimode=1
read 123.reg,**,&V
set-raw &V1=da撒4235Dew
set-raw &V2=
sed -ex &V=0:0,%&V1%,%&V2%,&V
//load #999*命令_字符替换 &V 正向 0:0,&V1,&V2
writ-uni *-nl *c 123.reg,$+0,%&V%
mess. %&V%
回复

使用道具 举报

55#
发表于 2019-7-18 16:17:25 | 显示全部楼层
201287zr 发表于 2019-7-18 12:41
请教大神EDIT命令参数问题,我想在编辑框中实现点击就停止TIME的定时器,但[编辑框事件]中定义为回车和双击 ...


自己修改红色命令

envi^ envimode=1
call @win
_SUB WIN,H280W400,CMD,
      EDIT *Edit1,L110T62W110H18,123,,,,,
      ENVI @EDIT1.MSG=_0X201::&WP,&LP,ENVI @EDIT1=456
_END
回复

使用道具 举报

56#
发表于 2019-7-18 17:15:43 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 16:45
刚测试 win7 下确实 不能 让 diskpart 常驻。

但是 cmd 下 diskpart >x.txt ,然后在 pecmd 里 随时 获 ...


既然DISKPART在WIN7中不能挂起, 脚本就没有通用性. 不玩了.

你的要求应该可以通过计时器实现,

SET-RAW &CMD=TEAM READ 123.TXT,**,&V|ENVI @CMD_EDIT=%&V%
TIME Timer1,100,%&CMD%  //100毫秒刷新一次

DISKPART_窗口ID.EXE

1.01 MB, 下载次数: 0, 下载积分: 无忧币 -2

回复

使用道具 举报

57#
发表于 2019-7-18 19:23:11 来自手机 | 显示全部楼层
Anson4 发表于 2019-7-18 19:12
实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,查找替换的字符串改成了多种测试,结果 ...


你用14309楼的PECMD试试,脚本中去掉//LOad#999前面的//。

对SED中的正则还是不太精通。

|
回复

使用道具 举报

58#
发表于 2019-7-18 19:43:09 来自手机 | 显示全部楼层
Anson4 发表于 2019-7-18 19:12
实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,查找替换的字符串改成了多种测试,结果 ...

使用14309楼的PECMD。

&V1和&V2的赋值是直接的,不用转义和修改
回复

使用道具 举报

59#
发表于 2019-7-18 19:51:03 来自手机 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-18 20:11 编辑
Anson4 发表于 2019-7-18 19:12
实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,查找替换的字符串改成了多种测试,结果 ...


不在电脑旁,测试不方便,我估计你是想把下面的字符串替换,对吧?
set-raw  &V1=C:\\Program Files\\Adobe Photoshop CC 2018.1.8

logs *xx.log
envi^ envimode=1
read PECMD_Test.reg,**,&V
set-raw &V1=C:\\Program Files\\Adobe Photoshop CC 2018.1.8
set-raw &V2=D:\\Design\\Adobe Photoshop CC 2018.1.8
//sed -ex &V=0:0,%&V1%,%&V2%,&V
load #999*命令_字符替换 &V 正向 0:0,&V1,&V2
writ-uni *-nl *c PECMD_Test.reg,$+0,%&V%
mess %&V%
mess %&V1%
mess %&V2%
回复

使用道具 举报

60#
发表于 2019-7-18 21:14:42 | 显示全部楼层
Anson4 发表于 2019-7-18 19:12
实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,查找替换的字符串改成了多种测试,结果 ...

不要点评,直接回复多好。

SED命令中\要转换成\\,使用Load #999则不需要,我已经把他傻爪化,当然,需要配套使用相应的pecmd.
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-27 15:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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