无忧启动论坛

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

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

    [复制链接]
9001#
发表于 2015-2-2 15:04:25 | 只看该作者
mdyblog 发表于 2015-2-2 00:02
这个是依赖DLL版。

pecmd_cli.exe 是带黑窗口的版。

这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。
EXEC* VV=%CurDir%\pecmd.exe
mess %VV%

这2个程序能合并为一个吗?比如WRIT #,$0,%string%表示强制输出到命令行,WRIT -仍然是原来的功能。
程序应该不需要去检查环境,由使用的人来保证正确使用。这样不知能否实现?

PECMD实现GUI已经很成熟了,实现命令行功能不知道有没有用。想想似乎用到的地方也不多。呵呵。

点评

》》PECMD实现GUI已经很成熟了,实现命令行功能 已经有了。 能读能写。 只是没有开黑窗口(一般人不用的)。  详情 回复 发表于 2015-2-2 16:53
>>>> 这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。 EXEC* VV=%CurDir%\pecmd.exe mess %VV% 这2个程序能合并为一个吗?比如WRIT #,$0,%string%表示强制输出到  详情 回复 发表于 2015-2-2 16:51
回复

使用道具 举报

9002#
 楼主| 发表于 2015-2-2 16:51:27 | 只看该作者
本帖最后由 mdyblog 于 2015-2-2 16:58 编辑
sp_star 发表于 2015-2-2 15:04
这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。
EXEC* V ...


>>>>
这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。
EXEC* VV=%CurDir%\pecmd.exe
mess %VV%

这2个程序能合并为一个吗?比如WRIT #,$0,%string%表示强制输出到命令行,WRIT -仍然是原来的功能。
程序应该不需要去检查环境,由使用的人来保证正确使用。这样不知能否实现?

PECMD实现GUI已经很成熟了,实现命令行功能不知道有没有用。想想似乎用到的地方也不多。呵呵。
----------------------
1:
是否 在命令显示出来, 不是 被调用程序代码(PECMD)说了算。 而是 CMD.EXE 说了算.
被调用程序代码 都是一样的写,没有区别。
区别的是接收的程序(CMD.EXE) 怎么处理。

有的*nix的命令程序, 会i统一显示。
MS判断被调用程序的格式。 如果是格式是控制台程序,CMD.exe才会显示;而且如果不是CMD启动,总会开1个黑窗口
     如果格式是GUI程序, 就不会开一个黑窗口,CMD.exe才会显示接受的输出。
程序 格式 不能同时是 控制台程序,又是  GUI程序。
比较:
控制台程序 :   CMD.exe会显示接受的输出。   问题: 双击运行会出来一个讨厌的黑窗口。

控制台程序 :   双击运行不会开一个黑窗口。      问题: CMD.exe才会显示接受的输出。



MS 很奇怪, 简单的问题,反倒搞复杂了。
  直接象LInux那样简单又方便: CMD.exe会显示接受的输出, 不自作聪明地自动开讨厌的黑窗口。
                 这样: 从CMD.EXE 启动, 显示接受的输出。 不从CMD.EXE启动, 也没有讨厌的黑窗口。


2:
上面2个程序, 代码是一模一样的,只是 编译时选择的格式不同。



3:
新版 支持PECMD.DLL、PECMD.EXE  已经出来了, 稍大点(新的4K)。
作为50版发布。

点评

作为50版发布 ==>已经发布了吗?  详情 回复 发表于 2015-2-2 18:04
回复

使用道具 举报

9003#
 楼主| 发表于 2015-2-2 16:53:49 | 只看该作者
sp_star 发表于 2015-2-2 15:04
这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。
EXEC* V ...

》》PECMD实现GUI已经很成熟了,实现命令行功能
已经有了。
能读能写。

只是没有开黑窗口(一般人不用的)。

点评

看样子只能分开。 最关键的是输出的信息要能被PECMD脚本读到,这样才能交互。 还有,gui的pecmd.exe也能在cmd窗口显示的, pecmd.exe|more,呵呵。  详情 回复 发表于 2015-2-2 17:33
回复

使用道具 举报

9004#
发表于 2015-2-2 17:33:17 | 只看该作者
mdyblog 发表于 2015-2-2 16:53
》》PECMD实现GUI已经很成熟了,实现命令行功能
已经有了。
能读能写。

看样子只能分开。
最关键的是输出的信息要能被PECMD脚本读到,这样才能交互。
还有,gui的pecmd.exe也能在cmd窗口显示的, pecmd.exe|more,呵呵。

点评

是的 可以重定向, 捕捉, 管道。 一旦 被管道到 DOS命令, 后面就会显示了。 FOR 也能收到到变量中, 太复杂 FOR /F ["options"] %variable IN ('command') DO command [command-parameters] 很多行文本  详情 回复 发表于 2015-2-2 18:35
回复

使用道具 举报

9005#
发表于 2015-2-2 18:04:20 | 只看该作者
mdyblog 发表于 2015-2-2 16:51
>>>>
这次PECMD的脚本可以获取返回值,换成pecmd_cli.exe也是可以的。这样就可以和PECMD脚本交互了。
...

作为50版发布
==>已经发布了吗?

点评

已经发布了。  详情 回复 发表于 2015-2-2 18:40
88.05.50 版 根据sp_star的建议, 完善了DLL版小PECMD.EXE的功能。 -------------------版本说明------------------------ PECMD_XX.EXE 直接双击执行不会出一个讨厌的黑窗口。但不能能在CMD.EXE界面中直  详情 回复 发表于 2015-2-2 18:28
回复

使用道具 举报

9006#
 楼主| 发表于 2015-2-2 18:28:43 | 只看该作者
本帖最后由 mdyblog 于 2015-2-3 01:33 编辑

sp_star 发表于 2015-2-2 18:04
作为50版发布
==>已经发布了吗?

88.05.50 版
根据sp_star的建议, 完善了DLL版小PECMD.EXE的功能。

-------------------版本说明------------------------
PECMD_XX.EXE      直接双击执行不会出一个讨厌的黑窗口。但不能能在CMD.EXE界面中直接看到输出,可以重定向,可以被管道,或 for more 等命令捕捉
PECMD_XX_cli.EXE  是能在CMD.EXE界面中看到输出,直接双击执行会出一个黑窗口。
XX=u    超微版, 只能呼叫PECMD.DLL, 不能添加资源。 1.5K
XX=min  迷你版, 只能呼叫PECMD.DLL, 能添加资源,能加自动脚本和其它资源。 3K
XX=ful  完整版, 优先呼叫PECMD.DLL,其次PECMD.NTR,其次PECMD.EXE, 能添加资源,能加自动脚本和其它资源。 4K

大的PECMD.EXE 也加了 _cli 版。



---------------------说明------------------------
由于 MS的CMD.EXE设计,windows图形程序的输出不会被显示在屏幕上, 只有那些CONSOLE程序的输出会被显示的。
CONSOLE程序, 就是双击有黑窗口的程序。

其它的命令shell是会显示的输入windows小的msys的命令行Shell。

CMD不显示,但是能接受,能捕捉,能重定向。

a.ini
  1. ENVI$ NL=0d 0a
  2. ENVI  S=HelloWorld 12345%NL%22222222222
  3. WRIT  -,$+0,%S%
复制代码

  1. pecmd load a.ini> a.txt
  2. type a.txt
  3. pause
复制代码



pecmd load a.ini | more

pecmd WRIT  -,$+0,Hello | more

pecmd WRIT  -,$+0,Hello | find  /V ""       //这个简洁,就是去掉了没有一个字符的空行。
pecmd WRIT  -,$+0,Hello | find  /V  "?********????*****????****^**()<>~!@#$%^&*()_+?"


FOR 也可以捕捉。
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
    command也可以是PECMD命令

A1.CMD:
  1. dir C:\ | PECMD  TEAM  READ --,1,V^| MESS. %%V%%
复制代码

每次读一行。

A2.CMD:
  1. dir C:\  | PECMD  TEAM  READ --,**,^&V^| MESS. %%^&V%%
复制代码

一次直接读完






FOR 捕捉到变量A.CMD:
  1. ::空格分割,分成25个变量 %a %b ...%y, 剩余给%z
  2. FOR /F "eol=; tokens=1-25,* delims= "  %%a IN ('PECMD.EXE LOAD a.ini') DO  @ set v1=%%a& set v2=%%b& set v3=%%c&& set v3=%%d

  3. ::一行都给var:
  4. FOR /F "eol=; tokens=1* delims="  %%a IN ('PECMD.EXE LOAD a.ini') DO  @set var=%%a
复制代码


其中A.INI:
  1. WRIT -,$+0,aa bb cc dd ee ff gg hh ii kkk llllll
复制代码




回复

使用道具 举报

9007#
 楼主| 发表于 2015-2-2 18:35:49 | 只看该作者
sp_star 发表于 2015-2-2 17:33
看样子只能分开。
最关键的是输出的信息要能被PECMD脚本读到,这样才能交互。
还有,gui的pecmd.exe也 ...

是的 可以重定向, 捕捉, 管道。
一旦 被管道到 DOS命令, 后面就会显示了。
FOR 也能收到到变量中, 太复杂
    FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

很多行文本,MORE 会停顿。
有没有 不停顿的 命令,300行只接转到屏莫上。

FOR  太繁琐,
有没有命令 将  大段输出文本,直接 囫囵收到一个变量中。
回复

使用道具 举报

9008#
 楼主| 发表于 2015-2-2 18:40:00 | 只看该作者
sp_star 发表于 2015-2-2 18:04
作为50版发布
==>已经发布了吗?

已经发布了。

点评

pecmd_full是不是打包错了,都是x64的?  详情 回复 发表于 2015-2-2 20:11
回复

使用道具 举报

9009#
发表于 2015-2-2 20:11:26 | 只看该作者

pecmd_full是不是打包错了,都是x64的?

点评

FOR 捕捉到变量A.CMD: 其中A.INI:  详情 回复 发表于 2015-2-2 21:46
1: 改过来了。 2: 加强了管道读 , 可以一次直接读完 A.CMD:  详情 回复 发表于 2015-2-2 20:56
回复

使用道具 举报

9010#
 楼主| 发表于 2015-2-2 20:56:07 | 只看该作者
sp_star 发表于 2015-2-2 20:11
pecmd_full是不是打包错了,都是x64的?

1: 改过来了。

2: 加强了管道读 , 可以一次直接读完
A.CMD:
  1. dir C:\  | PECMD  TEAM  READ --,**,^&V^| MESS. %%^&V%%
复制代码

回复

使用道具 举报

9011#
 楼主| 发表于 2015-2-2 21:46:12 | 只看该作者
sp_star 发表于 2015-2-2 20:11
pecmd_full是不是打包错了,都是x64的?



FOR 捕捉到变量A.CMD:
  1. ::空格分割,分成25个变量 %a %b ...%y, 剩余给%z
  2. FOR /F "eol=; tokens=1-25,* delims= "  %%a IN ('PECMD.EXE LOAD a.ini') DO  @ set v1=%%a& set v2=%%b& set v3=%%c&& set v3=%%d

  3. ::一行都给var:
  4. FOR /F "eol=; tokens=1* delims="  %%a IN ('PECMD.EXE LOAD a.ini') DO  @set var=%%a
复制代码


其中A.INI:
  1. WRIT -,$+0,aa bb cc dd ee ff gg hh ii kkk llllll
复制代码

点评

你这个办法太麻烦了,一般人看都看不懂,还是用_cli版的直接一点。一般|more也行,不超过一屏就没问题。 还有sort, find "??"也可以,不过效果更不好。 突然想到这种方式有个缺点,就是和x86,x64有关。呵呵,脚  详情 回复 发表于 2015-2-2 22:28
回复

使用道具 举报

9012#
发表于 2015-2-2 22:28:24 | 只看该作者
mdyblog 发表于 2015-2-2 21:46
FOR 捕捉到变量A.CMD:

你这个办法太麻烦了,一般人看都看不懂,还是用_cli版的直接一点。一般|more也行,不超过一屏就没问题。
还有sort, find "??"也可以,不过效果更不好。

突然想到这种方式有个缺点,就是和x86,x64有关。呵呵,脚本文件就没这个问题。
回复

使用道具 举报

9013#
发表于 2015-2-3 14:47:17 | 只看该作者
FIND是否可以比较文件大小?或者检测文件大小。

点评

SIZE V=文件或目录名 再用IFEX $比较  详情 回复 发表于 2015-2-4 02:19
回复

使用道具 举报

9014#
发表于 2015-2-4 00:21:29 | 只看该作者
辛苦了,一直关注这个{:soso_e179:}

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

2015了哈!怎么不更新为PECMD2015.x.xx.xx,一定有道理哈!

------------------------------------------------------------------------------
回复

使用道具 举报

9015#
 楼主| 发表于 2015-2-4 02:19:56 | 只看该作者
ling3882688 发表于 2015-2-3 14:47
FIND是否可以比较文件大小?或者检测文件大小。

SIZE  V=文件或目录名

再用IFEX $比较

点评

发现一个问题,CMPS压缩过的配置文件,再用CMPS还能压缩, 能否先判断一下,已经CMPS过的文件,就跳过去?  详情 回复 发表于 2015-2-5 12:31
好的,谢M大。  详情 回复 发表于 2015-2-4 17:20
回复

使用道具 举报

9016#
发表于 2015-2-4 17:20:37 | 只看该作者
mdyblog 发表于 2015-2-4 02:19
SIZE  V=文件或目录名

再用IFEX $比较

好的,谢M大。
回复

使用道具 举报

9017#
发表于 2015-2-4 20:36:42 | 只看该作者
本帖最后由 ling3882688 于 2015-2-4 20:45 编辑

如何在完整名称不确定的情况下获取指定文件名特定的部分?
例如:桌面有个文件夹名称是abcxxx
abc是固定的,但是xxx是变化的,例如文件名abc123 abc456都有可能,想要获取xxx的数值。
想使用NAME 但是通配符不行。
突然想到应该是可以用FORX命令的。我试下看看。
OK!搞定!
回复

使用道具 举报

9018#
发表于 2015-2-5 12:31:39 | 只看该作者
mdyblog 发表于 2015-2-4 02:19
SIZE  V=文件或目录名

再用IFEX $比较

发现一个问题,CMPS压缩过的配置文件,再用CMPS还能压缩,

能否先判断一下,已经CMPS过的文件,就跳过去?

点评

这个正常啊。 zip文件还能再压一次ZIP。 CMPS压缩文件有个标志CMP。  详情 回复 发表于 2015-2-5 12:42
回复

使用道具 举报

9019#
 楼主| 发表于 2015-2-5 12:42:43 | 只看该作者
527104427 发表于 2015-2-5 12:31
发现一个问题,CMPS压缩过的配置文件,再用CMPS还能压缩,

能否先判断一下,已经CMPS过的文件,就跳过 ...

这个正常啊。 zip文件还能再压一次ZIP。


CMPS压缩文件有个标志CMP。

点评

双重ZIP的只要解两次压就正常了。双重CMPS的没办法运行……  详情 回复 发表于 2015-2-5 12:44
回复

使用道具 举报

9020#
发表于 2015-2-5 12:44:40 | 只看该作者
mdyblog 发表于 2015-2-5 12:42
这个正常啊。 zip文件还能再压一次ZIP。

双重ZIP的只要解两次压就正常了。双重CMPS的没办法运行……

点评

解压2次,就可以运行了。  详情 回复 发表于 2015-2-5 12:49
回复

使用道具 举报

9021#
 楼主| 发表于 2015-2-5 12:49:37 | 只看该作者
本帖最后由 mdyblog 于 2015-2-5 12:54 编辑
527104427 发表于 2015-2-5 12:44
双重ZIP的只要解两次压就正常了。双重CMPS的没办法运行……


解压2次,就可以运行了。

还有一点, 其实无法判断 是否是 CMPS压缩的文件, 可能人家的2进制数据文件就是这样。
CMP标志,只能用来排除, 不能用来确认。

只能人来保证了。

比如一文件内容:
####CMPS 用法
XXXXXXXXXXXXXXX

虽然有CMP标志,单不是 CMPS压缩文件。

点评

这段代码无法运行窗口 TEAM CALL cppt|WINDOWS1 _SUB WINDOWS1,L5T5W300H200,WinCMD功能演示,EXEC $%&Curdir%,%IconFile%#19,20,,-trap -size 命令段 ITEM ITEM1,L168T122W101H30,ITEM1,KILL \, TABL TAB  详情 回复 发表于 2015-2-6 16:15
回复

使用道具 举报

9022#
发表于 2015-2-6 16:15:58 | 只看该作者
本帖最后由 2012yws@ 于 2015-2-6 16:21 编辑
mdyblog 发表于 2015-2-5 12:49
解压2次,就可以运行了。

还有一点, 其实无法判断 是否是 CMPS压缩的文件, 可能人家的2进制数据文 ...


这段代码无法运行窗口
TEAM CALL cppt|WINDOWS1
_SUB WINDOWS1,L5T5W300H200,WinCMD功能演示,EXEC $%&Curdir%,%IconFile%#19,20,,-trap -size
        ITEM ITEM1,L168T122W101H30,ITEM1,KILL \,
        TABL TABL1,L22T10W216H60,TABL1
_END

_SUB cppt
FORX /S /O:-N C:\windows\*.INI,&&f,0,
{
        MESS %f% @#OK
}
_END

从88.40-最新88.50测试,X86系统和64都一样

再问,如何查询鼠标选择的窗口与控件的ID,如我要查询窗口中表格控件的名称,如何做?
回复

使用道具 举报

9023#
 楼主| 发表于 2015-2-6 16:55:53 | 只看该作者
2012yws@ 发表于 2015-2-6 16:15
这段代码无法运行窗口
TEAM CALL cppt|WINDOWS1
_SUB WINDOWS1,L5T5W300H200,WinCMD功能演示,EXEC $% ...

大哥你这代码 坑爹啊, 点的我手痛。

文件太多了, 我改成最多2个。

能运行:
回复

使用道具 举报

9024#
 楼主| 发表于 2015-2-6 16:57:52 | 只看该作者
2012yws@ 发表于 2015-2-6 16:15
这段代码无法运行窗口
TEAM CALL cppt|WINDOWS1
_SUB WINDOWS1,L5T5W300H200,WinCMD功能演示,EXEC $% ...

》》如我要查询窗口中表格控件的名称,如何做?
没明白。
具体以上面的代码说, 举例说说查XXX的XXXX。
回复

使用道具 举报

9025#
发表于 2015-2-7 00:03:17 | 只看该作者
mdyblog 发表于 2015-2-6 16:57
》》如我要查询窗口中表格控件的名称,如何做?
没明白。
具体以上面的代码说, 举例说说查XXX的XXXX。

1        [LOGS *X:\cc.log]        <0>        :操作成功完成。
2        {CALL cppt}
11        {FORX /S /O:-N C:\windows\*.INI,&&f,0,}
13        [MESS C:\windows\win.ini @#OK]        <0>        :操作成功完成。
13        [MESS C:\windows\system.ini @#OK]        <0>        :操作成功完成。
13        [MESS C:\windows\msdfmap.ini @#OK]        <0>        :操作成功完成。
我的还是不行,上面是日志,到了窗口就不行了,CPU立刻爆满,风扇狂转中...
查询,比如我要查询TABL控件的标题(TABL1),要如何获得这个输出变量?
回复

使用道具 举报

9026#
 楼主| 发表于 2015-2-7 01:50:42 | 只看该作者
本帖最后由 mdyblog 于 2015-2-7 02:04 编辑
2012yws@ 发表于 2015-2-7 00:03
1        [LOGS *X:\cc.log]                :操作成功完成。
2        {CALL cppt}
11        {FORX /S /O:-N C:\windows\*.INI,&&f,0,}


  1. ENVI^ ENVIMODE=1
  2. CALL cppt
  3. CALL @WINDOWS1

  4. _SUB WINDOWS1,L5T5W300H200,WinCMD功能演示,EXEC $%&Curdir%,%IconFile%#19,20,,-trap -size
  5.         ITEM ITEM1,L168T122W101H30,ITEM1,KILL \,
  6.         TABL TABL1,L22T10W216H60,TABL1
  7. _END

  8. _SUB cppt
  9. FORX /S C:\windows\*.INI,&&f,5,
  10. {
  11.         MESS %f% @#OK
  12. }
  13. _END
复制代码

这样不行?
你试试。

2:
如表格:
ENVI $TAB=09
SET$ NL=0D 0A
TABL TABL1,L22T10W216H60,50:C1%TAB%+50:C2%TAB%-50:C3,11%TAB%222%NL%B11%TAB%B222

标题行是设计好的,不变, 自己先用变量保存好即可,如:TABL1.col1   TABL1.col2 ......

数据行 可以 查询。
如查询1,1
ENVI  @TABL1.VAL=?1.1;V1_1
MESS. %V1_1%
┃    │    │※可用"ENVI @名称.Val=?*.*;变量名"来获得全部数据。行间回车换行。                            ┃
┃    │    │※可用"ENVI @名称.Val=?行号[.列号];变量名"来查询指定行/单元的内容。各列TAB键间隔(下同)。    ┃
回复

使用道具 举报

9027#
发表于 2015-2-7 01:59:04 | 只看该作者
本帖最后由 ling3882688 于 2015-2-7 02:02 编辑


我用PART -hextp -phy# -fill list part 1#2 ,&&PT2获取的类型为什么不一样呢?
上下红框处,我想要的是上面一个红框中的结果。
回复

使用道具 举报

9028#
 楼主| 发表于 2015-2-7 02:07:45 | 只看该作者
ling3882688 发表于 2015-2-7 01:59
我用PART -hextp -phy# -fill list part 1#2 ,&&PT2获取的类型为什么不一样呢?
上下红框处,我想要的是 ...

还有这种怪事?
你用BootICE吧分区表备份下来, 传上来, 俺看看。
回复

使用道具 举报

9029#
发表于 2015-2-7 02:09:12 | 只看该作者
mdyblog 发表于 2015-2-7 02:07
还有这种怪事?
你用BootICE吧分区表备份下来, 传上来, 俺看看。

好的 稍等。
回复

使用道具 举报

9030#
发表于 2015-2-7 02:15:12 | 只看该作者
mdyblog 发表于 2015-2-7 02:07
还有这种怪事?
你用BootICE吧分区表备份下来, 传上来, 俺看看。

分区表.rar (59.58 KB, 下载次数: 3)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-27 09:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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