无忧启动论坛

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

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

    [复制链接]
4801#
发表于 2013-3-12 21:03:28 | 只看该作者
原帖由 2010qaqz111 于 2013-3-12 20:52 发表
LOOP #1=1, 的写法可否简化一下啊,比如不带任何参数就是无条件循环。

另外,现在貌似还没有批处理里的 goto 类似的功能吧?不过貌似这个也没多大必要,只是在批处理里面经常用 goto 配合 errorlevel 来实现 ...

用upx可以压缩  upx -9 pecmd.exe就可以了
楼主肯定是忘记压缩了
回复

使用道具 举报

4802#
发表于 2013-3-12 21:08:15 | 只看该作者
貌似 call +   exit 可以代替goto
回复

使用道具 举报

4803#
发表于 2013-3-12 21:19:40 | 只看该作者
貌似现在pecmd的envi出错了,有些envi命令会直接退出脚本
不知道哪儿改错了
回复

使用道具 举报

4804#
发表于 2013-3-12 21:21:14 | 只看该作者
不会是我系统出错了吗
回复

使用道具 举报

4805#
 楼主| 发表于 2013-3-12 21:47:05 | 只看该作者
原帖由 2011hwo1 于 2013-3-12 21:08 发表
貌似 call +   exit 可以代替goto

标准一点的语言,总在尽力避免不的不使用goto。 而用结构化编程。
你说的 【call +   exit 可以代替goto】怎么实现?
回复

使用道具 举报

4806#
 楼主| 发表于 2013-3-12 21:49:06 | 只看该作者
原帖由 2011hwo1 于 2013-3-12 21:19 发表
貌似现在pecmd的envi出错了,有些envi命令会直接退出脚本
不知道哪儿改错了

用  LOGS *D:\X.log 看看在哪儿退出的。 在写一个10行作用的测试贴上来吧。
回复

使用道具 举报

4807#
发表于 2013-3-12 22:03:09 | 只看该作者
logs *D:\X.log
call 检查数字名 fsw
_SUB 检查数字名
forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
mess %b%
_END

_SUB 查询文件时间
SITE ?-local ,aa=FTIME,%1
MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>%aa%
envi aa2=%aa1%%aa2%%aa3%%aa4%%aa5%%aa6%
envi a=%a%%aa2%
_END

x.log

[LOGS *D:\X.log]        <0>:操作成功完成。
[SITE ?-local ,aa=FTIME,D:\fzservic\feidat\BAK\fsw\20130312205956.fsw]        <0>:操作成功完成。
[MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>2013 03 12 20 59 56 133 2]        <0>:操作成功完成。
[envi aa2=20130312205956]        <0>:操作成功完成。
奇怪的是用PECMDEDIT编辑这个脚本后按F5将运行时PECMDEDIT居然退出,是我电脑的问题还是pemcdedit的问题?

[ 本帖最后由 2011hwo1 于 2013-3-12 22:15 编辑 ]
回复

使用道具 举报

4808#
发表于 2013-3-12 22:06:38 | 只看该作者
goto 一般是跳到指定的行标号去,goto下面的却不执行
在一个函数里面    而如果使用call 到一个函数就相当于是跳到指定的行标号了,但是会继续进行下面的,然后在后面加个exit后面的就不执行了
回复

使用道具 举报

4809#
发表于 2013-3-12 22:08:44 | 只看该作者
其实call 加个参数就相当于goto了,就是call后不返回到发生call命令的下一个语句就行了
行号就相当于一个_sub函数名,只不过goto是不带参数的,call是可以带参数的

[ 本帖最后由 2011hwo1 于 2013-3-12 22:11 编辑 ]
回复

使用道具 举报

4810#
发表于 2013-3-12 22:22:07 | 只看该作者
不一样,call 涉及堆栈处理,goto 是平级跳转。

goto 一般尽量避免使用,会使代码很难读,我是在bat里面配合errorlevel做switch用的,在bat里面这种用法遍地都是,这也是限于bat的流程逻辑不完善的原因,属于历史遗留问题。

Win系统一直缺少一个方便好用的脚本解释器,不像linux下面一堆脚本可以选,PECMD现在有这个趋势,单文件解释脚本,轻量级,前途一片光明啊。

[ 本帖最后由 2010qaqz111 于 2013-3-12 22:24 编辑 ]
回复

使用道具 举报

4811#
 楼主| 发表于 2013-3-12 22:22:28 | 只看该作者
原帖由 2011hwo1 于 2013-3-12 22:03 发表
logs *D:\X.log
call 检查数字名 fsw
_SUB 检查数字名
forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
mess %b%
_END

_SUB 查询文件时间
SITE ?-local ,a ...

ENVI &&&EnviMode=1
ENVI &&&FORCELOCAL=1

TEAM SET &b=| SET &a0=| SET &aa=| SET &aa1=| SET &aa2=| SET &aa3=| SET &aa4=| SET &aa5=| SET &aa6=
call 检查数字名 fsw
_SUB 检查数字名
    forx /o:-n D:\fzservic\feidat\BAK\%1\*.%1,a0,0,team 查询文件时间 %a0%|envi b=%b%\n%aa2%
    mess %b%
_END

_SUB 查询文件时间
    SITE ?-local ,aa=FTIME,%1
    MSTR aa1,aa2,aa3,aa4,aa5,aa6=<1*>%aa%
    envi aa2=%aa1%%aa2%%aa3%%aa4%%aa5%%aa6%
    envi a=%a%%aa2%
_END

/////////////
ENVI &&&FORCELOCAL=1
不想加。

ENVI &&&FORCELOCAL=1
一定要加。 不然出现奇怪的 灵异 哦!!!!

用4.0 试试下面的脚本
TEST_ENVIMODE.WCS:
// ENVI  &&&EnviMode=1
ENVI ABC=%ABC%
MESS  %ABC% @ #OK



[ 本帖最后由 mdyblog 于 2013-3-12 22:33 编辑 ]
回复

使用道具 举报

4812#
 楼主| 发表于 2013-3-12 22:24:15 | 只看该作者
原帖由 2010qaqz111 于 2013-3-12 22:22 发表
不一样,call 涉及堆栈处理,goto 是平级跳转。

goto 一般尽量避免使用,会使代码很难读,我前面也说了是在bat里面配合errorlevel做switch用的。

顶盖!               
回复

使用道具 举报

4813#
发表于 2013-3-12 22:33:19 | 只看该作者
我那段代码是因为envi a=%a%%aa2%出错而退出的,就是因为变量a没有赋值引起的,这应该是envi的问题
回复

使用道具 举报

4814#
 楼主| 发表于 2013-3-12 22:34:39 | 只看该作者
原帖由 2011hwo1 于 2013-3-12 22:33 发表
我那段代码是因为envi a=%a%%aa2%出错而退出的,就是因为变量a没有赋值引起的,这应该是envi的问题

加  
ENVI  &&&EnviMode=1
就是处理这类灵异事件


为了兼容老的 4.0 , 所以默认是 【ENVI  &&&EnviMode=0】。
老的代码99%都可以 【ENVI  &&&EnviMode=1】方式。

[ 本帖最后由 mdyblog 于 2013-3-12 22:38 编辑 ]
回复

使用道具 举报

4815#
 楼主| 发表于 2013-3-13 00:15:02 | 只看该作者
PECMD2012.1.75.1-130312-2.多窗口线程孵化版_win32_64.sfx.zip

1.  CALL $ 参数至此原始串,
前导=后接原始串。
**qd= 则参数全部为原始串。
原始串 就是还有%也不做变量解释。


-------测试---------
ENVI &&&EnviMode=1
SET$ &B=0 *4096 -
sprintf ,*&B,=%09X%18s,#123,=%&你好%
MESS. 【%&B%】

//结果【0x00000007B             %&你好%】

这里 格式串【%09d%8s】直接写, 否则每个个%要写成%%, 【%%09d%%8s】

同样 【%&你好%】也不会被解释掉为空!!



2.  ENVI 支持原始串
//后缀-raw    //等号后的部分%不做变量解释
-------测试---------
ENVI &&&EnviMode=1
SET  &A=
SET-raw &B=%&A%
MESS. 【%&B%】
//结果【%&A%】
B的内容是【%&A%】 而不是空。
回复

使用道具 举报

4816#
 楼主| 发表于 2013-3-13 10:54:04 | 只看该作者
原帖由 2011hwo1 于 2013-3-12 22:33 发表
我那段代码是因为envi a=%a%%aa2%出错而退出的,就是因为变量a没有赋值引起的,这应该是envi的问题


问题查出来了,
代码 中演化出下面代码:
%20130313090630
数据太大, 溢出了内部的数据范围。

已修正。
PECMD2012.1.75.1-130312-3.多窗口线程孵化版_win32_64.sfx.zip
回复

使用道具 举报

4817#
发表于 2013-3-13 11:17:32 | 只看该作者
原帖由 mdyblog 于 2013-3-13 10:54 发表


问题查出来了,
代码 中演化出下面代码:
%20130313090630
数据太大, 溢出了内部的数据范围。

已修正。
PECMD2012.1.75.1-130312-3.多窗口线程孵化版_win32_64.sfx.zip

envi否则数据运算吗?不会还会+-法吧?
回复

使用道具 举报

4818#
发表于 2013-3-13 11:20:48 | 只看该作者
我还以为我的系统坏了得,用pecmdedit运行pecmd脚本居然还会退出,现在运行脚本不自动退出了
回复

使用道具 举报

4819#
 楼主| 发表于 2013-3-13 11:28:59 | 只看该作者
原帖由 2011hwo1 于 2013-3-13 11:17 发表

envi否则数据运算吗?不会还会+-法吧?

不是的。 不会计算。 计算用CALC专业点。
问题不是直接出在 ENVI 本身上。 而是任何地方都会出。
出在翻译函数。这是任何命令都需要的,包挂后台悄悄记录调试信息的函数。

%20130313090630


需要解释%NNNNN 的变量。表示函数的第NNNNN个参数。
这要先将NNNNN 转化为C++的数据。C++数据时设计时就指定范围(宽度)了,碰到太大的数据,就超出范围,带来灵异事件。
回复

使用道具 举报

4820#
发表于 2013-3-13 11:42:34 | 只看该作者
关于&  &&
经过我的测试发现 下级函数能使用上级定义的函数 &   &&  &&& 变量并且返回值可以供上级使用,而上级不能使用下级定义的& && &&&变量,也就是说 & && &&&等价,不知道是不是对的
回复

使用道具 举报

4821#
 楼主| 发表于 2013-3-13 11:45:51 | 只看该作者
原帖由 2011hwo1 于 2013-3-13 11:20 发表
我还以为我的系统坏了得,用pecmdedit运行pecmd脚本居然还会退出,现在运行脚本不自动退出了


用pecmdedit运行pecmd脚本居然还会退出?
pecmdedit退出不应该。 因为脚本在PECMD进程中运行。 2者不搭界。完全分离的。
即使 脚本使 pecmd 死了,  PECMDEDIT 也毫发无损。

除非 脚本中 幻化 出一个 KILL 来杀死PECMDEDIT进程。

反正 默认的兼容(4.0)模式, 有很多灵异事件, 代码 不断 幻化 ,结果很难预料。
所以 还是加一个【ENVI &&&EnviMode=1】吧。 这样 逻辑是清楚确定的;结果是可以预料;一切在控制下运行。

兼容(4.0)模式 主要是解决多级变量(数组)问题, 4.0本身没有这种机制,所以需要 这种东西。
如下面的代码:
ENVI  A1=ABC
ENVI  A2=DEF
ENVI   I=1
MESS  %A%I%% @ #Ok

%A%I%% 需要兼容模式来解释。

PECMD2012 提供 外科手术式 的  精确打击 模式: 【ENVI~ 】  【SET~ 】
ENVI &&&EnviMode=1  //标准模式
ENVI  A1=ABC
ENVI  A2=DEF
ENVI   I=1
ENVI~  AI=A%I%      //多级变量(数组)
MESS  %AI% @ #Ok
回复

使用道具 举报

4822#
发表于 2013-3-13 11:58:12 | 只看该作者
1.It not support Unicode ???? MESS "unicode" -> error unicode font

2. Can set mini window1 ??
(Call Window1)

Thank !
回复

使用道具 举报

4823#
 楼主| 发表于 2013-3-13 12:06:46 | 只看该作者
原帖由 2011hwo1 于 2013-3-13 11:42 发表
关于&  &&
经过我的测试发现 下级函数能使用上级定义的函数 &   &&  &&& 变量并且返回值可以供上级使用,而上级不能使用下级定义的& && &&&变量,也就是说 & && &&&等价,不知道是不是对的



0: &只是一个修饰, 不是变量名的一部分。 &ABC   &&ABC 的变量名都是ABC。& 和&&用来告诉 PECMD如何处理ABC。

1: &&&不是用来定义、操作、引用 PE变量的。
      而是用来 作为 系统配置的开关。 如 ENVI   &&&&EnviMode=1
    当然对于,需要变量的地方, 多几个&也没管。此时统统当做&&。 如MSTR 中。
目前没有浪费代码来拦截这种不标准的代码, 以后可能会拦截的。
    所以还得 不要有 &&&老表示变量。
2:   
    SET & 等价 SET &&  等价 ENVI &&
    对于 【ENVI  &&&FORCELOCAL=1】模式,还有
    ENVI 等价 ENVI  &  等价 SET
3:
    下级函数能使用上级定义的PE变量, 返回后新值还是有效的。

4:上级不能使用下级定义的私有PE变量。在返回时,自动销毁,释放内存。
    需要保留的信息,需要在返回前写入 上级的变量。
私有PE变量: SET &  和SET && 和 ENVI && 和&&写入/定义的变量。
MSTR  &&A=1,2,ABCDEF
  A也是一个 私有PE变量。

上级下级不仅指函数,还有{}的级别。


5:
    所以 PE变量没有销毁命令, 是自动管理的。退出时自动销毁的。
    控件也一样。
    这样不用担心自然没有释放。
   也就是说 PECMD2012是按照面向对象(OOB)原则设计的。
回复

使用道具 举报

4824#
 楼主| 发表于 2013-3-13 12:08:31 | 只看该作者
原帖由 2011Tduy09 于 2013-3-13 11:58 发表
1.It not support Unicode ???? MESS "unicode" -> error unicode font

2. Can set mini window1 ??
(Call Window1)

Thank !

说的什么啊? 没明白
回复

使用道具 举报

4825#
发表于 2013-3-13 12:25:14 | 只看该作者
原帖由 mdyblog 于 2013-3-13 12:06 发表



0: &只是一个修饰, 不是变量名的一部分。 &ABC   &&ABC 的变量名都是ABC。& 和&&用来告诉 PECMD如何处理ABC。

1: &&&不是用来定义、操作、引用 PE变量的。
      而是用来 作为 系统配置的开关。  ...

上级变量&&变量 会被下级&变量修改
回复

使用道具 举报

4826#
 楼主| 发表于 2013-3-13 12:32:17 | 只看该作者
原帖由 2011hwo1 于 2013-3-13 12:25 发表

上级变量&&变量 会被下级&变量修改

是的。
所有 PE变量最终都是&&定义的。
谁定义的,就是谁的。

上级能访问的PE变量, 下级都可以访问和修返回后新值还是有效的
除非下级定义一个同名变量,屏蔽了上级同名变量的操作。
回复

使用道具 举报

4827#
发表于 2013-3-13 12:37:02 | 只看该作者
原帖由 mdyblog 于 2013-3-13 12:32 发表

是的。
所有 PE变量最终都是&&定义的。
谁定义的,就是谁的。

上级能访问的PE变量, 下级都可以访问和修改,返回后新值还是有效的。
除非下级定义一个同名变量,屏蔽了上级同名变量的操作。

应该是除非下级定义一个&&同名变量
回复

使用道具 举报

4828#
发表于 2013-3-13 13:48:34 | 只看该作者
Pecmd 4 support Unicode. Pecmd 2012 is not! Can't show chard unicode
回复

使用道具 举报

4829#
 楼主| 发表于 2013-3-13 14:12:30 | 只看该作者
原帖由 2011Tduy09 于 2013-3-13 13:48 发表
Pecmd 4 support Unicode. Pecmd 2012 is not! Can't show chard unicode

Pecmd 2012  also  support Unicode .

SAVE FILE  with Unicode(BOM)  or UTF8(BOM) or UnicodeBig(BOM).
UNICODE_TEST.wcs.zip (302 Bytes, 下载次数: 6)

[ 本帖最后由 mdyblog 于 2013-3-13 14:14 编辑 ]
回复

使用道具 举报

4830#
 楼主| 发表于 2013-3-13 14:18:38 | 只看该作者
原帖由 2011hwo1 于 2013-3-13 12:37 发表

应该是除非下级定义一个&&同名变量

是一个意思。
定义一个&&同名变量 就是 定义一个PE变量, 也是 定义一个本级PE变量。
因为PE变量就是用&&定义的。 (&&不是变量名的一部分,而是说明是定义一个变量)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-29 08:04

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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