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

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

   火... [复制链接]
发表于 2019-7-18 21:39:16 | 显示全部楼层
datbik189 发表于 2019-7-18 21:14
不要点评,直接回复多好。

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

明白了,谢谢!
回复

使用道具 举报

发表于 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就不要加百分号了。




点评

代码测试很成功,感谢回复! 然而我希望将这段代码通用化,当我将这段代码保存到文件,然后通过PECMD带参数LOAD的时候,就得不到相应的效果了,请指正! 保存到文件的代码: 通过该命令LOAD:  详情 回复 发表于 2019-7-20 08:43
谢谢! 明天我研究一下怎样才能最简单地套到CMD脚本中使用。  详情 回复 发表于 2019-7-18 22:38
回复

使用道具 举报

发表于 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)

无标题.png

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

  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


复制代码

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

点评

恭喜恭喜,又攻破一难题,代码更上一层楼了。  详情 回复 发表于 2019-7-18 22:50
好消息,改天我找个WIN7电脑测试下。  详情 回复 发表于 2019-7-18 22:48
回复

使用道具 举报

发表于 2019-7-18 22:38:25 | 显示全部楼层
527104427 发表于 2019-7-18 22:28
1.我用手机编辑过,可能是这个原因,自动将“&”变成“&#174;”了。
2.其实要学到东西,还是要自己搞 ...

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

点评

还用什么CMD脚本,多LOW啊,直接改用PECMD脚本,高大上,而且效率又高!  详情 回复 发表于 2019-7-18 22:53
回复

使用道具 举报

发表于 2019-7-18 22:48:48 来自手机 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 22:31
diskpart 可以在 win7下驻留。

1.不用第二线程

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

点评

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

使用道具 举报

发表于 2019-7-18 22:50:13 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 22:31
diskpart 可以在 win7下驻留。

1.不用第二线程

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

点评

我甚至想 如果 cmd 能够驻留就行,可以把 diskpart传递给 cmd 窗口,不就相当于运行 diskpart 了吗。现在看,不用了。哈哈。  详情 回复 发表于 2019-7-18 22:56
回复

使用道具 举报

发表于 2019-7-18 22:53:27 | 显示全部楼层
Anson4 发表于 2019-7-18 22:38
谢谢!
明天我研究一下怎样才能最简单地套到CMD脚本中使用。

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

点评

可是还有很多其他的操作需要处理,用PECMD写不来,主要是PECMD的帮助看起来比较吃力,没有CMD的帮助那么容易理解。  详情 回复 发表于 2019-7-18 23:14
回复

使用道具 举报

发表于 2019-7-18 22:56:46 | 显示全部楼层
本帖最后由 dos时代菜鸟 于 2019-7-18 22:58 编辑
527104427 发表于 2019-7-18 22:50
恭喜恭喜,又攻破一难题,代码更上一层楼了。


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

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

点评

cmd我也试过了,也是不行的。 一个diskpart能从开始一直保留到结束,也是够牛的了,哈  详情 回复 发表于 2019-7-18 23:03
回复

使用道具 举报

发表于 2019-7-18 23:03:08 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 22:56
我甚至想 如果 cmd 能够驻留就行,可以把 diskpart传递给 cmd 窗口,不就相当于运行 diskpart 了吗。现 ...

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

点评

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

使用道具 举报

发表于 2019-7-18 23:14:48 | 显示全部楼层
527104427 发表于 2019-7-18 22:53
还用什么CMD脚本,多LOW啊,直接改用PECMD脚本,高大上,而且效率又高!

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

使用道具 举报

发表于 2019-7-18 23:37:56 | 显示全部楼层
527104427 发表于 2019-7-18 23:03
cmd我也试过了,也是不行的。
一个diskpart能从开始一直保留到结束,也是够牛的了,哈

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

使用道具 举报

发表于 2019-7-18 23:40:16 | 显示全部楼层
datbik189 发表于 2019-7-18 22:48
好消息,改天我找个WIN7电脑测试下。

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

点评

测试了WIN7系统,貌似只有你那个方法让diskpart一直后台挂着,再使用临时文件获取回显。EXE* 用不了。  详情 回复 发表于 2019-7-19 21:08
这个没有哦。 PECMD2012由M大一人开发,为兼容PECMD4.0,新版本兼容旧版本,新功能兼容旧功能,语法难免不规范,有些功能在说明中阐述不清。唯一权威的资料就是这个网页里面的附件和示范脚本。 5大和红毛大跟M  详情 回复 发表于 2019-7-19 12:39
回复

使用道具 举报

发表于 2019-7-19 07:48:32 来自手机 | 显示全部楼层
其实直接
exec diskpart.exe就行了啊,不需要cmd的,所以才有你们说的不能驻留进程的问题吧

点评

主要是 想 获取 命令的输出结果 并且可以 向 diskpart 窗口输入指令。 exec* 控件=diskpart 这样的方法在 win7 下不能实现,就要考虑 通过中间文件的办法,而 diskpart 本身 不具备输出文件能力,需要借助 cmd  详情 回复 发表于 2019-7-19 08:05
回复

使用道具 举报

发表于 2019-7-19 08:05:52 | 显示全部楼层
红毛樱木 发表于 2019-7-19 07:48
其实直接
exec diskpart.exe就行了啊,不需要cmd的,所以才有你们说的不能驻留进程的问题吧

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

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

点评

那个输出结果的txt文件,不能删除,一直被占用  详情 回复 发表于 2019-7-19 15:22
回复

使用道具 举报

发表于 2019-7-19 12:39:53 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 23:40
code 和 sendmsg  用的摸不着头脑,也不知有没有更详细的解说

这个没有哦。

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

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

使用道具 举报

发表于 2019-7-19 15:22:40 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-19 08:05
主要是 想 获取 命令的输出结果 并且可以 向 diskpart 窗口输入指令。

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

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

点评

http://bbs.wuyou.net/forum.php?mod=attachment&aid=Mzk3MjQxfGQ1ZjBhOGMyfDE1NjM1NDUzMzV8MTE5OHw0MTUzOTI%3D http://bbs.wuyou.net/forum.php?mod=viewthread&tid=415392&fromuid=1198 这个 不会有 不能删  详情 回复 发表于 2019-7-19 22:20
确实,应该等待 diskpart 进程 Exit 了以后 再删除。  详情 回复 发表于 2019-7-19 22:13
回复

使用道具 举报

发表于 2019-7-19 15:43:24 | 显示全部楼层
本帖最后由 红毛樱木 于 2019-7-19 15:45 编辑
  1. ENVI &&WM_CHAR=0x0102
  2. ENVI &&DiskPartResult="%temp%\DiskPartResult.txt"
  3. IFEX %&DiskPartResult%,FILE %&DiskPartResult%
  4. CALL @WIN
  5. _SUB WIN,W800H600,,KILL *%&DiskPartPid%
  6.     ^EXEC -hide -pid:&CmdPid cmd.exe /k "diskpart.exe >%&DiskPartResult% & exit"
  7.     LOOP #1=1,
  8.     {*
  9.         FIND --class:ConsoleWindowClass --forpid:%&CmdPid% --wid*@ &DiskPartWidInfos
  10.         FIND $%&DiskPartWidInfos%<>,
  11.         {*
  12.             MSTR* * &DiskPartWid,&FixDiskPartWid=<2><8>&DiskPartWidInfos
  13.             //注意这里的%&FixDiskPartWid%信息是在win7中获取得到的,其他系统中可能不一样,自己适配一下
  14.             ^IFEX '%&FixDiskPartWid%'='%SystemROOT%\system32\cmd.exe - diskpart.exe   ',
  15.             {*
  16.                 FIND --pid*.#%&CmdPid% &DiskPartPid,diskpart.exe
  17.                 EXIT LOOP
  18.             }
  19.         }
  20.     }
  21.     CALL FixDone
  22.     LABE ,L10T15W90H48,待输入的命令:
  23.     EDIT &DiskPartCommandLines,L100T10W680H24,,
  24.     ITEM ,L10T60W300H54,执行命令,CALL DoDiskPart,
  25.     EDIT-| &DiskPartCallBack,L10T120W780H400,,,0xC
  26. _END

  27. //判断最后一行为'DISKPART> '则说明命令执行完成 //如果还有别的信息,在这里补上
  28. _SUB FixDone
  29.     LOOP #1=1,
  30.     {*
  31.         ENVI &LastLine=
  32.         READ %&DiskPartResult%,0,&LastLine
  33.         IFEX '%&LastLine%'='DISKPART> ',
  34.         {*
  35.             EXIT LOOP
  36.         }
  37.     }
  38. _END

  39. _SUB DoDiskPart
  40.     READ %&DiskPartResult%,-1,&DiskPartResultLines
  41.     CODE *,%&DiskPartCommandLines%,*UNI,&DiskPartCommandLinesHexs
  42.     FORX * %&DiskPartCommandLinesHexs%,&DiskPartCommandLinesHex,
  43.     {*
  44.         ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;%&DiskPartCommandLinesHex%
  45.     }
  46.     ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;0x0D   //实际发送一个0x0D就行了
  47.     //ENVI @@SENDMSG=%&DiskPartWid%;%&WM_CHAR%;0x0A
  48.     LOOP #1=1,
  49.     {*
  50.         ENVI &TheLines=0
  51.         READ %&DiskPartResult%,-1,&TheLines
  52.         IFEX $%&TheLines%>0,
  53.         {*
  54.             IFEX $%&TheLines%>%&DiskPartResultLines%,
  55.             {*
  56.                 CALL FixDone
  57.                 EXIT LOOP
  58.             }
  59.         }
  60.     }
  61.     //这里还可以根据&TheLines和&DiskPartResultLines的差值来截取每次的输出信息
  62.     READ %&DiskPartResult%,**,&DiskPartResultInfos
  63.     ENVI @&DiskPartCallBack=%&DiskPartResultInfos%
  64. _END
复制代码


以上代码在Win7中调试的,其他系统不知道是否一样,理论应该差不多吧。
回复

使用道具 举报

发表于 2019-7-19 17:00:47 | 显示全部楼层
本帖最后由 datbik189 于 2019-7-22 15:53 编辑

看到你们show脚本,我也发一下,

使用临时文件的:

ENVI^ ENVIMODE=1
TEAM SET$ &NL=D A|SET$ &TAB=9|MSTR &FILE=1,8,%RANDOM%|SET &FILE="%TEMP%\%&FILE%.TXT"|SET &END=DISKPART> %&NL%DISKPART> |STRL &END_LEN=%&END%
TEAM DATE &T1 UPTIME|EXEC -PID:&PID *CMD.EXE /K DISKPART.EXE>%&FILE%&DEL %&FILE%&EXIT
THREAD* -HERE -TID:&TID LOOP #1=1,TEAM FIND --WID*@. &V|SET &V1=%&TAB%%&PID%%&TAB%|LOAD #999*命令_FIND.EXE &V "" &V1|MSTR * &WID=<2>&V|CALC -BASE=16 &WID=%&WID%|SET-RET &WID=%&WID%|IFEX $%&WID%>0,EXIT LOOP
WAIT 1500 *=%&TID%
IFEX $%&WID%>0,ENVI @@SENDMSG=%&WID%;0X102;0XD!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错|EXIT FILE
CALL @CMD_WIN

_SUB CMD_WIN,H410W600,DISKPART,CALL RUN EXIT
EDIT-| &CMD_EDIT1,L10T295H70W520,,,0X20
EDIT-| &CMD_EDIT,L10T10H280W580,,,0X864
ENVI @&CMD_EDIT.READONLY=1
LOOP #1=1,TEAM IFEX %&FILE%,!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错||KILL \||EXIT FILE|READ %&FILE%,**,&RET|MSTR * &V=-1,%&END_LEN%,&RET|IFEX*C '%&END%'='%&V%',TEAM SED -EX &V=0,(%&NL%DISKPART> )+,%&NL%DISKPART> ,&RET||DATE &T2 UPTIME||CALC &T3=%&T2%-%&T1%||ENVI @&CMD_EDIT=%&V%   ( 启动耗时 %&T3% ms )%&NL%%&NL%DISKPART> ||EXIT LOOP
SET-RAW &CMD=TEAM SET &RET_NEW=|DATE &T4 UPTIME|FORX *NL &CMD_EDIT1,&COMMAND,FIND $%&COMMAND%=,!TEAM DATE &T1 UPTIME||CALL RUN &COMMAND||DATE &T2 UPTIME||CALC &T3=%&T2%-%&T1%||ENVI @&CMD_EDIT=%&CMD_EDIT%%&COMMAND%   ( 耗时 %&T3% ms )%&NL%%&RET_NEW%|FIND $%&RET_NEW%=,!TEAM CALC &T5=%&T2%-%&T4%||ENVI @&CMD_EDIT=%&CMD_EDIT%   ( 总耗时 %&T5% ms )%&NL%%&NL%DISKPART> |IFEX %&FILE%,!KILL \
ITEM &CMD_BUT,L530T329H20W50,RUN,TEAM ENVI @&CMD_BUT.ENABLE=0|%&CMD%|ENVI @&CMD_BUT.ENABLE=1
_END

_SUB RUN
FIND $%1=,EXIT _SUB
FIND $%1=EXIT,TEAM SET &CHAR=EXIT%&NL%|LOAD #999*命令_宽字符 &CHAR|FORX * %&CHAR%,&CHAR1,ENVI @@SENDMSG=%&WID%;0X102;0X%&CHAR1%|EXIT _SUB
TEAM READ %&FILE%,**,&RET|SET &RET_=%RET%|^SET &CHAR=%%%~1%%%&NL%%&NL%|IFEX*C '%&CHAR%'='%&NL%%&NL%',EXIT _SUB
TEAM LOAD #999*命令_宽字符 &CHAR|FORX * %&CHAR%,&CHAR1,ENVI @@SENDMSG=%&WID%;0X102;0X%&CHAR1%
LOOP #1=1,TEAM IFEX %&FILE%,!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错||EXIT _SUB|READ %&FILE%,**,&RET|MSTR * &CHAR=-1,%&END_LEN%,&RET|IFEX*C ['%&END%'='%&CHAR%' & '%&RET%'<>'%&RET_%'],EXIT LOOP
TEAM READ -*,-1,&LINE,&RET_|CALC &LINE=%&LINE%+1|READ -*,%&LINE%+0,&RET_NEW,&RET|SED -EX &RET_NEW=0,(%&NL%DISKPART> )+,%&NL%DISKPART> ,&RET_NEW|SET-RET &RET_NEW=%&RET_NEW%
_END

不使用临时文件的:

ENVI^ ENVIMODE=1
TEAM SET$ &NL=D A|SET$ &TAB=9|SET &END=DISKPART> %&NL%DISKPART> |STRL &END_LEN=%&END%
TEAM DATE &T1 UPTIME|THREAD* -HERE CALL @START
THREAD* -HERE -TID:&TID LOOP #1=1,TEAM FIND --WID*@. &V|SET &V1=%&TAB%%&PID%%&TAB%|LOAD #999*命令_FIND.EXE &V "" &V1|MSTR * &WID=<2>&V|CALC -BASE=16 &WID=%&WID%|SET-RET &WID=%&WID%|IFEX $%&WID%>0,EXIT LOOP!WAIT 100
WAIT 1500 *=%&TID%
IFEX $%&WID%>0,ENVI @@SENDMSG=%&WID%;0X102;0XD!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错|EXIT FILE
CALL @CMD_WIN

_SUB CMD_WIN,H410W600,DISKPART,CALL RUN EXIT
EDIT-| &CMD_EDIT1,L10T295H70W520,,,0X20
EDIT-| &CMD_EDIT,L10T10H280W580,,,0X864
ENVI @&CMD_EDIT.READONLY=1
LOOP #1=1,TEAM FIND $%PROCEED%=,!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错||KILL \||EXIT LOOP|MSTR * &V=-1,%&END_LEN%,&RET|IFEX*C '%&END%'='%&V%',TEAM SED -EX &V=0,(%&NL%DISKPART> )+,%&NL%DISKPART> ,&RET||DATE &T2 UPTIME||CALC &T3=%&T2%-%&T1%||ENVI @&CMD_EDIT=%&V%   ( 启动耗时 %&T3% ms )%&NL%%&NL%DISKPART> ||EXIT LOOP
SET-RAW &CMD=TEAM SET &RET_NEW=|DATE &T4 UPTIME|FORX *NL &CMD_EDIT1,&COMMAND,FIND $%&COMMAND%=,!TEAM DATE &T1 UPTIME||CALL RUN &COMMAND||DATE &T2 UPTIME||CALC &T3=%&T2%-%&T1%||ENVI @&CMD_EDIT=%&CMD_EDIT%%&COMMAND%   ( 耗时 %&T3% ms )%&NL%%&RET_NEW%|FIND $%&RET_NEW%=,!TEAM CALC &T5=%&T2%-%&T4%||ENVI @&CMD_EDIT=%&CMD_EDIT%   ( 总耗时 %&T5% ms )%&NL%%&NL%DISKPART> |FIND $%PROCEED%=,!KILL \
ITEM &CMD_BUT,L530T329H20W50,RUN,TEAM ENVI @&CMD_BUT.ENABLE=0|%&CMD%|ENVI @&CMD_BUT.ENABLE=1
_END

_SUB START,#,CATCH,
TIME -T:1 &TIMER1,100,TEAM EXEC* -PID:&PID @&RET=*DISKPART.EXE|ENVI PROCEED=0|KILL \
TIME &TIMER2,50,@TEAM @SET-RET2 &PID=%&PID%|@SET-RET2 &RET=%&RET%
EDIT-| &RET,L10T10H180W380
_END

_SUB RUN
FIND $%1=,EXIT _SUB
FIND $%1=EXIT,TEAM SET &CHAR=EXIT%&NL%|LOAD #999*命令_宽字符 &CHAR|FORX * %&CHAR%,&CHAR1,ENVI @@SENDMSG=%&WID%;0X102;0X%&CHAR1%|EXIT _SUB
TEAM SET &RET_=%RET%|^SET &CHAR=%%%~1%%%&NL%%&NL%|IFEX*C '%&CHAR%'='%&NL%%&NL%',EXIT _SUB
TEAM LOAD #999*命令_宽字符 &CHAR|FORX * %&CHAR%,&CHAR1,ENVI @@SENDMSG=%&WID%;0X102;0X%&CHAR1%
LOOP #1=1,TEAM FIND $%PROCEED%=,!TEAM MESS.+ICON0 DISKPART.EXE 未启动!@出错||EXIT LOOP|MSTR * &CHAR=-1,%&END_LEN%,&RET|IFEX*C ['%&END%'='%&CHAR%' & '%&RET%'<>'%&RET_%'],EXIT LOOP
TEAM READ -*,-1,&LINE,&RET_|CALC &LINE=%&LINE%+1|READ -*,%&LINE%+0,&RET_NEW,&RET|SED -EX &RET_NEW=0,(%&NL%DISKPART> )+,%&NL%DISKPART> ,&RET_NEW|SET-RET &RET_NEW=%&RET_NEW%
_END

DISKPART.7z

983.94 KB, 下载次数: 6

回复

使用道具 举报

发表于 2019-7-19 17:04:25 | 显示全部楼层
m大好几年不出现,你们这是要疯的节奏啊,哈哈哈

点评

还没到一年哎  详情 回复 发表于 2019-7-20 00:46
回复

使用道具 举报

发表于 2019-7-19 21:08:39 | 显示全部楼层
dos时代菜鸟 发表于 2019-7-18 23:40
code 和 sendmsg  用的摸不着头脑,也不知有没有更详细的解说

测试了WIN7系统,貌似只有你那个方法让diskpart一直后台挂着,再使用临时文件获取回显。EXE* 用不了。

点评

因为如果用 exec* 直接把结果传递给 控件 的 ,就要用 = ,强制等待,而这个在 win7 下 失灵。  详情 回复 发表于 2019-7-19 22:14
回复

使用道具 举报

发表于 2019-7-19 22:13:17 | 显示全部楼层
红毛樱木 发表于 2019-7-19 15:22
那个输出结果的txt文件,不能删除,一直被占用

确实,应该等待 diskpart 进程 Exit 了以后 再删除。
回复

使用道具 举报

发表于 2019-7-19 22:14:58 | 显示全部楼层
datbik189 发表于 2019-7-19 21:08
测试了WIN7系统,貌似只有你那个方法让diskpart一直后台挂着,再使用临时文件获取回显。EXE* 用不了。

因为如果用  exec* 直接把结果传递给 控件 的 ,就要用  =  ,强制等待,而这个在  win7 下 失灵。
回复

使用道具 举报

发表于 2019-7-19 22:20:24 | 显示全部楼层
红毛樱木 发表于 2019-7-19 15:22
那个输出结果的txt文件,不能删除,一直被占用

http://bbs.wuyou.net/forum.php?m ... 8MTE5OHw0MTUzOTI%3D

http://bbs.wuyou.net/forum.php?m ... 92&fromuid=1198

这个 不会有 不能删除的问题。

点评

无聊,弄了一下 DISKPART 测试脚本. 事实证明DISKPART挂在后台, 运行很快.(启动耗时 462 ms ,4个命令耗时 62 ms) Microsoft DiskPart 版本 10.0.14393.0 Copyright (C) 1999-2013 Microsoft Corporation  详情 回复 发表于 2019-7-22 11:00
回复

使用道具 举报

发表于 2019-7-20 00:46:17 来自手机 | 显示全部楼层
527104427 发表于 2019-7-19 17:04
m大好几年不出现,你们这是要疯的节奏啊,哈哈哈

还没到一年哎
回复

使用道具 举报

发表于 2019-7-20 08:43:20 | 显示全部楼层
527104427 发表于 2019-7-18 22:28
1.我用手机编辑过,可能是这个原因,自动将“&”变成“&reg;”了。
2.其实要学到东西,还是要自己搞 ...


代码测试很成功,感谢回复!

然而我希望将这段代码通用化,当我将这段代码保存到文件,然后通过PECMD带参数LOAD的时候,就得不到相应的效果了,请指正!

保存到文件的代码(_Script.txt):
  1. SET  &FILE=%~1
  2.     SET-raw  &String=%~2
  3.     SET-raw  &ReplaceString=%~3
  4.     READ %&FILE%,**,&STR
  5.     SED  &String2=0,\\,\\\\,%&String%
  6.     SED  &ReplaceString2=0,\\,\\\\,%&ReplaceString%
  7.     SED  &Results=0,%&String2%,%&ReplaceString2%,%&STR%
  8.     WRIT-UNICODE *c *fv %&FILE%,$0,&Results
  9. _END

  10. Replace "%~1" "%~2" "%~3"
复制代码


通过该命令LOAD:
  1. PECMD.exe load "C:\A4\_Script.txt" "C:\A4\PECMD_Test.reg" "C:\\Program Files\\Adobe Photoshop CC 2018.1.8" "D:\\Design\\Adobe Photoshop CC 2018.1.8"
复制代码

点评

少了一个_SUB吧  详情 回复 发表于 2019-7-20 09:01
回复

使用道具 举报

发表于 2019-7-20 09:01:43 | 显示全部楼层
本帖最后由 527104427 于 2019-7-20 09:14 编辑
Anson4 发表于 2019-7-20 08:43
代码测试很成功,感谢回复!

然而我希望将这段代码通用化,当我将这段代码保存到文件,然后通过PECM ...

少了一个_SUB吧

_SUB Replace
SET  &FILE=%1
SET-raw  &String=%~2
SET-raw  &ReplaceString=%~3
READ %&FILE%,**,&STR
SED  &String2=0,\\,\\\\,%&String%
SED  &ReplaceString2=0,\\,\\\\,%&ReplaceString%
SED  &Results=0,%&String2%,%&ReplaceString2%,%&STR%
WRIT-UNICODE *c *fv %&FILE%,$0,&Results
_END
Replace "%~1" "%~2" "%~3"


点评

惭愧  详情 回复 发表于 2019-7-20 09:24
回复

使用道具 举报

发表于 2019-7-20 09:24:56 | 显示全部楼层
本帖最后由 Anson4 于 2019-7-20 09:32 编辑
527104427 发表于 2019-7-20 09:01
少了一个_SUB吧

_SUB Replace


惭愧

加上_SUB Replace也没有效果:
  1. _SUB Replace
  2.     SET  &FILE=%~1
  3.     SET-raw  &String=%~2
  4.     SET-raw  &ReplaceString=%~3
  5.     READ %&FILE%,**,&STR
  6.     SED  &String2=0,\\,\\\\,%&String%
  7.     SED  &ReplaceString2=0,\\,\\\\,%&ReplaceString%
  8.     SED  &Results=0,%&String2%,%&ReplaceString2%,%&STR%
  9.     WRIT-UNICODE *c *fv %&FILE%,$0,&Results
  10. _END
  11. Replace "%~1" "%~2" "%~3"
复制代码

点评

你把全套文件发上来  详情 回复 发表于 2019-7-20 09:39
回复

使用道具 举报

发表于 2019-7-20 09:39:28 | 显示全部楼层
Anson4 发表于 2019-7-20 09:24
惭愧

加上_SUB Replace也没有效果:

你把全套文件发上来

点评

好的,请看附件:  详情 回复 发表于 2019-7-20 09:41
回复

使用道具 举报

发表于 2019-7-20 09:41:58 | 显示全部楼层
527104427 发表于 2019-7-20 09:39
你把全套文件发上来

好的,请看附件:
PECMD_Script_Test.zip (979.77 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2019-7-20 10:42:42 | 显示全部楼层
Anson4 发表于 2019-7-20 09:41
好的,请看附件:

PECMD_Script.7z (468 Bytes, 下载次数: 7)

点评

我现在用的是本楼附件这个脚本,今天又遇到了新的问题,比如将下图左边的字符串替换成右边的字符串(变量作为字符串不展开)时达不到效果:  详情 回复 发表于 2019-7-21 10:05
完美解决了,感谢指导!  详情 回复 发表于 2019-7-20 11:02
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-17 04:45

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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