无忧启动论坛

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

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

    [复制链接]
14311#
发表于 2019-7-18 09:45:47 | 只看该作者
本帖最后由 Anson4 于 2019-7-18 09:47 编辑
527104427 发表于 2019-7-17 18:36
看了一下,这个方法就是挨个把字母转换成按键编码,再挨个发送给diskpart
前提是得把所有英文字母的十六 ...


请教老司机:PECMD有什么指令能用来处理文本文件的字符串(查找和替换)?

我查看了帮助,WIRT 可以处理文本文件的字符串,但是只能以行为单位来处理。
我需要再CMD脚本中以指定的字符串为单位来处理,比如将“da撒4235Dew”替换成空""或者其它字符串,有什么办法吗?

目前我用 FR.exe 和 STR.exe 来处理,但是这两个不支持导出来的注册表,貌似是文档的编码(貌似是UNICODE)不受支持。


WRIT、FR.exe 和 STR.exe 有个共同的特点:直接修改目标文档。
回复

使用道具 举报

14312#
发表于 2019-7-18 11:33:25 | 只看该作者
本帖最后由 527104427 于 2019-7-18 22:07 编辑
Anson4 发表于 2019-7-18 09:45
请教老司机:PECMD有什么指令能用来处理文本文件的字符串(查找和替换)?

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

这个简单:

SET  &FILE=%CurDir%\abc.reg
SET  &String=da撒4235Dew
SET  &ReplaceString=听说你想替换我是吗  //替换为空就删掉这赋值
READ %&FILE%,**,&STR
SED  &Results=0,%&String%,%&ReplaceString%,%&STR%   //SED 变量名[;次名]=[替换次数][:跳过次数][标志],正则,替换,原串
WRIT-UNICODE *c *fv %&FILE%,$0,&Results




getf命令是另一种方法,不用读取到内存,直接查找文件,方法有点复杂。没有read那么简单粗暴。










回复

使用道具 举报

14313#
发表于 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%
回复

使用道具 举报

14314#
发表于 2019-7-18 12:41:37 | 只看该作者
请教大神EDIT命令参数问题,我想在编辑框中实现点击就停止TIME的定时器,但[编辑框事件]中定义为回车和双击,似乎不太方便,而且我发现双击编辑框也没有反应,能不能自己更改成单击编辑框就停止定时器功能呢。我的代码是这样的:
  1. EDIT *Edit1,L110T62W110H18,%var%,TEAM ENVI @Timer1=0|ENVI @Edit1.Val=?ip,0
  2. TIME *Timer1,1000,CALL next
复制代码

我想实现单击编辑框中内容就停止计时,并自动由谋个变量接收更改的内容,不知道是不是我的代码不问题或是有没有其它实现方法呢?求大神指点下

点评

拿去,不谢: SET &::EN_CHANGE=0x0300 SET &::WM_KEYDOWN=0x0100 SET &::WM_LBUTTONDOWN=0x0201 SET &::WM_RBUTTONDOWN=0x0204 CALL @WIN _SUB WIN,W254H168,CMD, EDIT &Edit1,L24T25W110H18,123,  详情 回复 发表于 2019-7-18 17:30
自己修改红色命令 envi^ envimode=1 call @win _SUB WIN,H280W400,CMD, EDIT *Edit1,L110T62W110H18,123,,,,, ENVI @EDIT1.MSG=_0X201::&WP,&LP,ENVI @EDIT1=456 _END  详情 回复 发表于 2019-7-18 16:17
回复

使用道具 举报

14315#
发表于 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
回复

使用道具 举报

14316#
发表于 2019-7-18 16:45:22 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-7-18 16:52 编辑

刚测试 win7 下确实 不能 让 diskpart 常驻。

但是 cmd 下 diskpart >x.txt ,然后在 pecmd 里 随时 获取 x.txt 的内容 到 @cmd_edit 中 是否可行呢?
回复

使用道具 举报

14317#
发表于 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, 下载次数: 1, 下载积分: 无忧币 -2

回复

使用道具 举报

14318#
发表于 2019-7-18 17:30:24 | 只看该作者
201287zr 发表于 2019-7-18 12:41
请教大神EDIT命令参数问题,我想在编辑框中实现点击就停止TIME的定时器,但[编辑框事件]中定义为回车和双击 ...

拿去,不谢:

SET &::EN_CHANGE=0x0300
SET &::WM_KEYDOWN=0x0100
SET &::WM_LBUTTONDOWN=0x0201
SET &::WM_RBUTTONDOWN=0x0204

CALL @WIN

_SUB WIN,W254H168,CMD,
        EDIT &Edit1,L24T25W110H18,123,
        LABE &LABE1,L23T59W146H30,
        LABE &LABE2,L24T100W168H30,输入框内容为:%&Edit1%,
        ENVI &time=1
        TIME &Timer1,1000,CALL next
        CALL next
        ENVI @&Edit1.MSG=_%&WM_RBUTTONDOWN%: TEAM ENVI @&Timer1=0| ENVI @&LABE1=已停止计时
        ENVI @&Edit1.MSG=_%&WM_LBUTTONDOWN%: TEAM ENVI @&Timer1=0| ENVI @&LABE1=已停止计时
        ENVI @&Edit1.MSG=+%&WM_KEYDOWN%: TEAM ENVI @&Timer1=0| ENVI @&LABE1=已停止计时
        ENVI @&Edit1.ID=?;&Edit1_ID
        ENVI @this.MSG=_COMMAND#%&Edit1_ID%#%&EN_CHANGE%: ENVI @&LABE2=输入框内容为:%&Edit1%

_END

_SUB next
        ENVI @&LABE1=计时:%&time% 秒
        CALC #&time=%&time%+1
_END





回复

使用道具 举报

14319#
发表于 2019-7-18 19:10:13 | 只看该作者
本帖最后由 Anson4 于 2019-7-18 19:34 编辑
527104427 发表于 2019-7-18 11:33
这个简单:

SET  ®FILE=%CurDir%\abc.reg


查看PECMD的帮助,没找到“®”号,这个表示什么意思呢?
替换成“&”貌似也不起作用。
实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,请进一步指导一下!
PECMD_Test_02.zip (549.91 KB, 下载次数: 4)
回复

使用道具 举报

14320#
发表于 2019-7-18 19:12:15 | 只看该作者
datbik189 发表于 2019-7-18 11:36
sed-替换命令  writ-修改文本命令

logs *xx.log

实际上我还遇到了“\"两个变成一个的问题。
附件是我测试的文档,查找替换的字符串改成了多种测试,结果都不行,请进一步指导一下!
PECMD_Test_01.zip (549.94 KB, 下载次数: 4)
回复

使用道具 举报

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


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

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

|
回复

使用道具 举报

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

使用14309楼的PECMD。

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

使用道具 举报

14323#
发表于 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%
回复

使用道具 举报

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

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

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

使用道具 举报

14325#
发表于 2019-7-18 21:39:16 | 只看该作者
datbik189 发表于 2019-7-18 21:14
不要点评,直接回复多好。

SED命令中\要转换成\\,使用Load #999则不需要,我已经把他傻爪化,当然, ...

明白了,谢谢!
回复

使用道具 举报

14326#
发表于 2019-7-18 22:28:20 | 只看该作者
本帖最后由 527104427 于 2019-7-18 22:29 编辑
Anson4 发表于 2019-7-18 19:10
查看PECMD的帮助,没找到“®”号,这个表示什么意思呢?
替换成“&”貌似也不起作用。
实际上我 ...


1.我用手机编辑过,可能是这个原因,自动将“&”变成“®”了。
2.其实要学到东西,还是要自己搞懂原理,把\变成\\,也是非常简单的。
3.你用的PECMD太旧了,建议下载最新版,否则很多功能都用不成。最新版:http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
   怕你下载不来,我上传吧: PECMD2012.1.88.05.82Stable-180148测试.part06.rar (2.9 MB, 下载次数: 0)
                                          PECMD2012.1.88.05.82Stable-180148测试.part05.rar (4 MB, 下载次数: 0)
                                          PECMD2012.1.88.05.82Stable-180148测试.part04.rar (4 MB, 下载次数: 0)
                                          PECMD2012.1.88.05.82Stable-180148测试.part03.rar (4 MB, 下载次数: 0)
                                          PECMD2012.1.88.05.82Stable-180148测试.part02.rar (4 MB, 下载次数: 0)
                                          PECMD2012.1.88.05.82Stable-180148测试.part01.rar (4 MB, 下载次数: 0)

4.你要的效果如下:

SET  &FILE=%CurDir%\PECMD_Test.reg
SET-raw  &String=C:\\Program Files\\Adobe Photoshop CC 2018.1.8
SET-raw  &ReplaceString=D:\\Design\\Adobe Photoshop CC 2018.1.8
READ %&FILE%,**,&STR
SED  &String2=0,\\,\\\\,%&String%
SED  &ReplaceString2=0,\\,\\\\,%&ReplaceString%
SED  &Results=0,%&String2%,%&ReplaceString2%,%&STR%
WRIT-UNICODE *c *fv %&FILE%,$0,&Results   //注意,用了*fv,&Results就不要加百分号了。




回复

使用道具 举报

14327#
发表于 2019-7-18 22:31:08 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-7-19 06:48 编辑

diskpart 可以在 win7下驻留。

1.不用第二线程
2.利用 cmd /k 运行 diskpart 并将 diskpart 的结果传给一个文件
3.通过定时读取 结果文件的行数变化 判断命令是否运行完了
4.从结果文件中 提取指定部分 显示到 edit 控件。

diskpart5.txt (1.54 KB, 下载次数: 2)



代码如下:
--------------------------------------------------

  1. //logs --2 * xx.log
  2. envi^ envimode=1

  3. envi result="%temp%\result.txt"  //定义临时文件
  4. envi enter=0x0D 0x00 0x0A 0x00  //定义变量记录 回车符对应的 宽码

  5.       exec -pid:cmdpid cmd.exe /k  "diskpart.exe >%result% & exit"     //方便调试 没有隐藏运行
  6.       //exec -pid:cmdpid *cmd.exe /k  "diskpart.exe >%result% & exit"  //隐藏运行
  7.       loop #0=0,
  8.       {
  9.             team envi lx=|envi pidx=|envi wid=
  10.             wait 200
  11.             find --forpid:%cmdpid% --wid*@. &lx
  12.             mstr pidx,wid=<6><2>%lx%
  13.             find #%pidx%=%cmdpid%,
  14.             {
  15.                   calc -base=16 wid=%wid%
  16.                   exit loop
  17.             }
  18.       }  

  19. call @cmd_win
  20. _Sub cmd_win,h410 w600 ,diskpart,call exit9
  21.       edit-| cmd_edit, L10  T10  H280 w580,,,76
  22.       edit   cmd_edit1,L10  T295 h70 w520,,,0x20
  23.       item cmd_but,    L530 t329 h20 w50,Run,call send_diskpart
  24. _end
  25. _sub exit9
  26.       code *,exit ,*-unicode,&lx
  27.       forx * %&lx% %enter%,&xltr,ENVI @@SENDMSG=%WID%;0x102;%&xltr% //退出 diskpart
  28.       kill *%cmdpid%
  29.       file %result%
  30. _end

  31. _sub send_diskpart
  32.       envi. &cmd_x=%cmd_edit1%
  33.       read %result%,-1,&ln_0
  34.       forx *NL cmd_x,&lx,
  35.       {
  36.         code *,%&lx% ,*-unicode,&lx
  37.         read %result%,-1,&ln0
  38.         forx * %&lx% %enter%,&xltr,ENVI @@SENDMSG=%WID%;0x102;%&xltr%
  39.         loop #1=1,
  40.         {
  41.             wait 200
  42.             read %result%,-1,&ln2
  43.             find #%&ln2%>%&ln0%,exit loop
  44.         }
  45.       }
  46.     read %result%,%&ln_0%+0,&result_x
  47.     envi @cmd_edit=%&result_x%
  48. _end


复制代码

--------------------------------------------------------------------

回复

使用道具 举报

14328#
发表于 2019-7-18 22:38:25 | 只看该作者
527104427 发表于 2019-7-18 22:28
1.我用手机编辑过,可能是这个原因,自动将“&”变成“®”了。
2.其实要学到东西,还是要自己搞 ...

谢谢!
明天我研究一下怎样才能最简单地套到CMD脚本中使用。
回复

使用道具 举报

14329#
发表于 2019-7-18 22:48:48 来自手机 | 只看该作者
dos时代菜鸟 发表于 2019-7-18 22:31
diskpart 可以在 win7下驻留。

1.不用第二线程

好消息,改天我找个WIN7电脑测试下。

点评

code 和 sendmsg 用的摸不着头脑,也不知有没有更详细的解说  详情 回复 发表于 2019-7-18 23:40
回复

使用道具 举报

14330#
发表于 2019-7-18 22:50:13 | 只看该作者
dos时代菜鸟 发表于 2019-7-18 22:31
diskpart 可以在 win7下驻留。

1.不用第二线程

恭喜恭喜,又攻破一难题,代码更上一层楼了。
回复

使用道具 举报

14331#
发表于 2019-7-18 22:53:27 | 只看该作者
Anson4 发表于 2019-7-18 22:38
谢谢!
明天我研究一下怎样才能最简单地套到CMD脚本中使用。

还用什么CMD脚本,多LOW啊,直接改用PECMD脚本,高大上,而且效率又高!
回复

使用道具 举报

14332#
发表于 2019-7-18 22:56:46 | 只看该作者
本帖最后由 dos时代菜鸟 于 2019-7-18 22:58 编辑
527104427 发表于 2019-7-18 22:50
恭喜恭喜,又攻破一难题,代码更上一层楼了。


我甚至想 如果 cmd 能够驻留就行,可以把 diskpart传递给 cmd 窗口,不就相当于运行 diskpart 了吗。现在看,不用了。哈哈。

这下 很多 cmd 脚本 命令 都可以通过这个方式 “暗箱” 完成了。
回复

使用道具 举报

14333#
发表于 2019-7-18 23:03:08 | 只看该作者
dos时代菜鸟 发表于 2019-7-18 22:56
我甚至想 如果 cmd 能够驻留就行,可以把 diskpart传递给 cmd 窗口,不就相当于运行 diskpart 了吗。现 ...

cmd我也试过了,也是不行的。
一个diskpart能从开始一直保留到结束,也是够牛的了,哈
回复

使用道具 举报

14334#
发表于 2019-7-18 23:14:48 | 只看该作者
527104427 发表于 2019-7-18 22:53
还用什么CMD脚本,多LOW啊,直接改用PECMD脚本,高大上,而且效率又高!

可是还有很多其他的操作需要处理,用PECMD写不来,主要是PECMD的帮助看起来比较吃力,没有CMD的帮助那么容易理解。
回复

使用道具 举报

14335#
发表于 2019-7-18 23:37:56 | 只看该作者
527104427 发表于 2019-7-18 23:03
cmd我也试过了,也是不行的。
一个diskpart能从开始一直保留到结束,也是够牛的了,哈

cmd 是可以驻留的,只是我们以前习惯用 “cmd /c call” 调用批处理 指令,其实用 cmd /k 就可以了,也不用 = ,那个cmd 就在那里,一直等着你录入命令。只是不自动关闭而已,exec 时就记录下他的进程号,然后手动 关了他。
回复

使用道具 举报

14336#
发表于 2019-7-18 23:40:16 | 只看该作者
datbik189 发表于 2019-7-18 22:48
好消息,改天我找个WIN7电脑测试下。

code 和 sendmsg  用的摸不着头脑,也不知有没有更详细的解说
回复

使用道具 举报

14337#
发表于 2019-7-19 07:48:32 来自手机 | 只看该作者
其实直接
exec diskpart.exe就行了啊,不需要cmd的,所以才有你们说的不能驻留进程的问题吧
回复

使用道具 举报

14338#
发表于 2019-7-19 08:05:52 | 只看该作者
红毛樱木 发表于 2019-7-19 07:48
其实直接
exec diskpart.exe就行了啊,不需要cmd的,所以才有你们说的不能驻留进程的问题吧

主要是 想 获取 命令的输出结果 并且可以 向 diskpart 窗口输入指令。

exec* 控件=diskpart  这样的方法在 win7 下不能实现,就要考虑 通过中间文件的办法,而 diskpart 本身 不具备输出文件能力,需要借助 cmd 的 ">" 才行。
回复

使用道具 举报

14339#
发表于 2019-7-19 12:39:53 | 只看该作者
dos时代菜鸟 发表于 2019-7-18 23:40
code 和 sendmsg  用的摸不着头脑,也不知有没有更详细的解说

这个没有哦。

PECMD2012由M大一人开发,为兼容PECMD4.0,新版本兼容旧版本,新功能兼容旧功能,语法难免不规范,有些功能在说明中阐述不清。唯一权威的资料就是这个网页里面的附件和示范脚本。

5大和红毛大跟M大混的时间比较长,你问他们看看。
回复

使用道具 举报

14340#
发表于 2019-7-19 15:22:40 | 只看该作者
dos时代菜鸟 发表于 2019-7-19 08:05
主要是 想 获取 命令的输出结果 并且可以 向 diskpart 窗口输入指令。

exec* 控件=diskpart  这样的方 ...

那个输出结果的txt文件,不能删除,一直被占用
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-7 07:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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