无忧启动论坛

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

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

    [复制链接]
11041#
发表于 2015-10-9 21:32:09 | 只看该作者
阿弥陀佛 发表于 2015-10-9 20:57
新版LOAD命令是不是失效了?习惯EverEdit编辑脚本,发现不能快速运行了。然后直接用PECMD LOAD发现不行了

不好意思。又可以了。可能是以前的代码有些问题。我再找找原因。
回复

使用道具 举报

11042#
 楼主| 发表于 2015-10-9 21:39:56 | 只看该作者
阿弥陀佛 发表于 2015-10-9 20:57
新版LOAD命令是不是失效了?习惯EverEdit编辑脚本,发现不能快速运行了。然后直接用PECMD LOAD发现不行了


可能编辑工具的问题,或者是设置问题。
PECMDEdit EditPlus没问题的。
aa.wcs.zip (184 Bytes, 下载次数: 1)
回复

使用道具 举报

11043#
发表于 2015-10-9 21:41:41 | 只看该作者
阿弥陀佛 发表于 2015-10-9 21:32
不好意思。又可以了。可能是以前的代码有些问题。我再找找原因。

奇怪。发现问题是,如果在UTF-8编码的文本中,不能使用中文的注释,删除中文注释就可以了。其它编码却没问题。这是怎么回事?
回复

使用道具 举报

11044#
 楼主| 发表于 2015-10-9 22:13:15 | 只看该作者
本帖最后由 mdyblog 于 2015-10-9 22:14 编辑
阿弥陀佛 发表于 2015-10-9 21:41
奇怪。发现问题是,如果在UTF-8编码的文本中,不能使用中文的注释,删除中文注释就可以了。其它编码却没 ...

没指定编码, 就这样的不确定。
在开始加
#code=65001

或者 设置编辑器,在文件中保存BOM

UTF8=65001
GBK(简体)=936
TW=950

点评

使用哪一个好? [attachimg]228932[/attachimg]  详情 回复 发表于 2015-10-9 22:57
了解了。使用UTF-8是因为之前的ANSI脚本在繁体系统上乱码,后来就改成UTF-8。  详情 回复 发表于 2015-10-9 22:52
回复

使用道具 举报

11045#
发表于 2015-10-9 22:52:50 | 只看该作者
本帖最后由 阿弥陀佛 于 2015-10-9 22:55 编辑
mdyblog 发表于 2015-10-9 22:13
没指定编码, 就这样的不确定。
在开始加
#code=65001


了解了。
回复

使用道具 举报

11046#
发表于 2015-10-9 22:57:22 | 只看该作者
mdyblog 发表于 2015-10-9 22:13
没指定编码, 就这样的不确定。
在开始加
#code=65001

使用哪一个好?
回复

使用道具 举报

11047#
发表于 2015-10-9 23:02:17 | 只看该作者

搜索了一下。utf-16 le bom在intel平台上效率较高。就这么设置了
回复

使用道具 举报

11048#
 楼主| 发表于 2015-10-9 23:04:10 | 只看该作者
阿弥陀佛 发表于 2015-10-9 23:02
搜索了一下。utf-16 le bom在intel平台上效率较高。就这么设置了

如果带BOM
UTF8   UNICODE 都可以的 。
回复

使用道具 举报

11049#
 楼主| 发表于 2015-10-9 23:20:10 | 只看该作者
PECMD2012.1.88.05.73-1005.7z

支持一键恢复/备份等单一应用模式
PECMD.INI 值设置好屏幕, INIT 之后:
moun -udm onlyapp   //检测并执行一键恢复等单一程序


对其BCD或BOOT.INI 执行:
moun -udm SetOnlyApp F:\BOOT\BCD  GHO 1  ?:\一键恢复.NTR
moun -udm SetOnlyApp F:\efi\microsoft\boot\BCD  GHO 1  ?:\一键恢复.NTR

这样 该PE启动时,就只做一件事, 搜索?:\一键恢复.NTR 并执行。 没找到的话还是如通常一样启动PE。


清除一键恢复绑定:
moun -udm SetOnlyApp F:\BOOT\BCD
moun -udm SetOnlyApp F:\efi\microsoft\boot\BCD

回复

使用道具 举报

11050#
发表于 2015-10-10 06:35:33 | 只看该作者
老大,我想将一个执行结果贮存到一个变量中,并按行读取,是用一个循环用LPOS检查回车换行符,再不断截取还是怎么的?那不是要数组来存贮?

另外我又看到LPOS**[*][#$] [-qu] [-delims:分割符] [-case] 变量名=子字符串,数值,字符串
这个-delims又如何用,没看到示例代码。

点评

另外我又看到LPOS**[*][#$] [-qu] [-delims:分割符] [-case] 变量名=子字符串,数值,字符串 这个-delims又如何用,没看到示例代码。 ------------------------------------------- 比如以#分隔的多串 LPOS** -de  详情 回复 发表于 2015-10-10 08:08
1: 并按行读取 ----------- READ 可以。 EXEC* &&MSG=*cmd /c dir C:\ READ -*,-1,Lines,&MSG //直接获得行数 MESS 行数%Lines% READ -*,5,Line,&MSG //直接读取第5行 MESS 第5行【%Line%】  详情 回复 发表于 2015-10-10 08:01
回复

使用道具 举报

11051#
 楼主| 发表于 2015-10-10 08:01:15 | 只看该作者
hhh333 发表于 2015-10-10 06:35
老大,我想将一个执行结果贮存到一个变量中,并按行读取,是用一个循环用LPOS检查回车换行符,再不断截取还 ...

1: 并按行读取
-----------
READ 可以。
EXEC*  &&MSG=*cmd /c dir C:\
READ -*,-1,Lines,&MSG    //直接获得行数
MESS 行数%Lines%

READ -*,5,Line,&MSG   //直接读取第5行
MESS 第5行【%Line%】
  
回复

使用道具 举报

11052#
 楼主| 发表于 2015-10-10 08:08:14 | 只看该作者
本帖最后由 mdyblog 于 2015-10-10 08:22 编辑

hhh333 发表于 2015-10-10 06:35
老大,我想将一个执行结果贮存到一个变量中,并按行读取,是用一个循环用LPOS检查回车换行符,再不断截取还 ...


另外我又看到LPOS**
  • [#$] [-qu] [-delims:分割符] [-case] 变量名=子字符串,数值,字符串
    这个-delims又如何用,没看到示例代码。
    -------------------------------------------
    比如以#分隔的多串
    1. LPOS** -delims:# V=123,1,aaa#bbb#123#4444
    2. MESS %V%  //3
    复制代码



    1. SET$  NLA=0A  //注意是换行(1个字符), 不是回车换行(2个字符)
    2. LPOS** -delims:\n V=123,1,aaa%&NLA%bbb%&NLA%123%&NLA%4444   //查找换行符间隔的子串
    3. MESS %V%
    复制代码


    1. EXEC* &&MSG1=*cmd /c dir /B c:\
    2. READ  -*,*,&MSG,&MSG1   //换行转换: MS的回车换行  换成 换行
    3. LPOS** -delims:\n V=WINDOWS,1,%MSG%   //查找换行符间隔的子串
    4. MESS %V%
    复制代码


    READ 支持  "换行" 和 “回车换行” 或者他们的混用。 READ *fix 还支持  “回车” 及 其混用 (一些加密的BAT批处理)。
  • 回复

    使用道具 举报

    11053#
    发表于 2015-10-10 09:50:35 | 只看该作者
    本帖最后由 hhh333 于 2015-10-10 10:00 编辑

    我看那个将CMD变脚本的文本,转换后出现REGI  $HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\\=Microsoft Word Basic
    变成一个\是不是好理解一些:HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\  表示其下的默认值。

    这个
    reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders" /f /v "%CD%\\BORDERS\\" /t REG_SZ /d ""
    改成脚本怎么写

    点评

    这个 reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders" /f /v "%CD%\\BORDERS\\" /t REG_SZ /d "" 改成脚本怎么写 ----------------------- REGI HKLM\SOFTWARE\Microsoft\Wind  详情 回复 发表于 2015-10-10 10:17
    1: 变成一个\是不是好理解一些:HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\ 表示其下的默认值。 -------------------- 一般可以这样。 但是有些奇怪的键名含有\,这样就会混淆。如 \DosDevices\C:  详情 回复 发表于 2015-10-10 10:13
    刚才试了一下后面一句用这个可以了: REGI $HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders\\%CurDir%\BORDERS\= 说明两个\\是重要的,第一个\代表是子项下,第二个是引导的是值,如果后面直  详情 回复 发表于 2015-10-10 10:09
    回复

    使用道具 举报

    11054#
    发表于 2015-10-10 10:09:15 | 只看该作者
    hhh333 发表于 2015-10-10 09:50
    我看那个将CMD变脚本的文本,转换后出现REGI  $HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\\=Micr ...

    刚才试了一下后面一句用这个可以了:
    REGI  $HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders\\%CurDir%\BORDERS\=
    说明两个\\是重要的,第一个\代表是子项下,第二个是引导的是值,如果后面直接接=号代表是默认值。这样就理解了。
    回复

    使用道具 举报

    11055#
     楼主| 发表于 2015-10-10 10:13:07 | 只看该作者
    本帖最后由 mdyblog 于 2015-10-10 10:20 编辑
    hhh333 发表于 2015-10-10 09:50
    我看那个将CMD变脚本的文本,转换后出现REGI  $HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\\=Micr ...


    1:
    变成一个\是不是好理解一些:HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\  表示其下的默认值。
    --------------------
    一般可以这样。
    但是有些奇怪的 值名含有\,这样就会混淆。如 \DosDevices\C:
    所以用\\优先表示 路径 和 值名 的分隔。
    HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\\\DosDevices\C:

    \\ 优先,且是左优先 (默认的\分隔是最右优先)
    解释为
    HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices  的  \DosDevices\C:
    回复

    使用道具 举报

    11056#
     楼主| 发表于 2015-10-10 10:17:58 | 只看该作者
    hhh333 发表于 2015-10-10 09:50
    我看那个将CMD变脚本的文本,转换后出现REGI  $HKCR\CLSID\{000209FE-0000-0000-C000-000000000046}\\=Micr ...

    这个
    reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders" /f /v "%CD%\\BORDERS\\" /t REG_SZ /d ""
    改成脚本怎么写
    -----------------------

    REGI $HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders\\%_CD%\BORDERS\=
          ----------------------------------------------------------------  -------------- --
    回复

    使用道具 举报

    11057#
    发表于 2015-10-10 13:05:47 | 只看该作者
    本帖最后由 ling3882688 于 2015-10-10 13:13 编辑

    M大,变量和变量叠加怎么处理?
    SET Num=1
    SET A1=111
    SET A2=222
    SET A3=333
    //我想显示A+Num这个变量,比如上面Num=1,那也就是显示A1
    MESS %A%Num%%
    考虑复杂了,MESS %A%Num%%就可以了。

    点评

    MESS %A%Num%% ------------ 这是4.0的用法。 这样有问题。 建议不要这样。 ENVI^ EnviMode=1 或 ENVI^ ForceLocal=1 后,就没有这个效果了。 PECMD2012正规的用法: SET~[/backcolor] Ai=A%Num% 最近的  详情 回复 发表于 2015-10-10 13:38
    回复

    使用道具 举报

    11058#
     楼主| 发表于 2015-10-10 13:38:48 | 只看该作者
    本帖最后由 mdyblog 于 2015-10-10 13:40 编辑
    ling3882688 发表于 2015-10-10 13:05
    M大,变量和变量叠加怎么处理?
    SET Num=1
    SET A1=111


    MESS %A%Num%%
    ------------
    这是4.0的用法。
    这样有问题;编出来的脚本,会出你意想不到的幽灵问题。好像示例中有测试脚本演示这个问题。

    建议不要这样。
    ENVI^ EnviMode=1 或  ENVI^ ForceLocal=1 后,就没有这个效果了。

    PECMD2012正规的用法:
    SET~  Ai=A%Num%
    最近的版本还有一种用法
    ^SET  Ai=%%A%Num%%%

    1. SET Num=1
    2. SET A1=111
    3. SET A2=222
    4. SET A3=333
    5. SET~ Ai=A%Num%
    6. MESS A%Num%=[%Ai%]   //A1=[111]
    复制代码


    1. SET Num=1
    2. SET A1=111
    3. SET A2=222
    4. SET A3=333
    5. SET~ Ai=A%Num%
    6. ^SET  Ai=%%A%Num%%%   //A1=[111]
    复制代码

    点评

    谢谢M大,本来还有个测试的实例想请教呢,看了你的回复修改了一下,问题解决了。~再解释一次即可。  详情 回复 发表于 2015-10-10 14:28
    回复

    使用道具 举报

    11059#
    发表于 2015-10-10 14:28:12 | 只看该作者
    本帖最后由 ling3882688 于 2015-10-10 14:29 编辑
    mdyblog 发表于 2015-10-10 13:38
    MESS %A%Num%%
    ------------
    这是4.0的用法。


    谢谢M大,本来还有个测试的实例想请教呢,看了你的回复修改了一下,问题解决了。~再解释一次即可。

    有个小建议,PECMD打开之后下面的代码区域如果粘贴了很多代码,可否选中某个代码之后点搜索就是搜索选中部分?

    点评

    是在上面的 帮助文本中搜索---找相关帮助 吗?  详情 回复 发表于 2015-10-10 14:35
    回复

    使用道具 举报

    11060#
     楼主| 发表于 2015-10-10 14:35:26 | 只看该作者
    ling3882688 发表于 2015-10-10 14:28
    谢谢M大,本来还有个测试的实例想请教呢,看了你的回复修改了一下,问题解决了。~再解释一次即可。

    ...

    是在上面的 帮助文本中搜索---找相关帮助  吗?

    点评

    [attachimg]228989[/attachimg] 如上图。  详情 回复 发表于 2015-10-10 14:41
    回复

    使用道具 举报

    11061#
    发表于 2015-10-10 14:41:27 | 只看该作者
    本帖最后由 ling3882688 于 2015-10-10 14:44 编辑
    mdyblog 发表于 2015-10-10 14:35
    是在上面的 帮助文本中搜索---找相关帮助  吗?



    如上图。在有很多代码和文字的情况下,选中之后点搜索搜索的也不是选中的文字而是最开头的代码。所以不是很方便。

    点评

    新版支持了。 还支持键搜索 效果: [attachimg]229006[/attachimg]  详情 回复 发表于 2015-10-10 16:03
    回复

    使用道具 举报

    11062#
     楼主| 发表于 2015-10-10 16:03:14 | 只看该作者
    ling3882688 发表于 2015-10-10 14:41
    如上图。在有很多代码和文字的情况下,选中之后点搜索搜索的也不是选中的文字而是最开头的代码。所以 ...

    新版支持了。 还支持<F3>键搜索
    效果:

    点评

    谢M大!太棒了。  详情 回复 发表于 2015-10-10 16:07
    回复

    使用道具 举报

    11063#
    发表于 2015-10-10 16:07:29 | 只看该作者
    mdyblog 发表于 2015-10-10 16:03
    新版支持了。 还支持键搜索
    效果:

    谢M大!太棒了。
    回复

    使用道具 举报

    11064#
     楼主| 发表于 2015-10-10 21:29:33 | 只看该作者
    这个PECMDX64 内置了WoW64补丁。 大家测试下。
    在MAIN 和 INIT指令时自动执行。

    PECMD.rar

    861.36 KB, 下载次数: 9

    点评

    初步使用能正常运行32位程序 最新的包内的pecmd-x64 是否已经支持wow64了?  详情 回复 发表于 2015-10-11 15:48
    MAIN,使用PECMD就会用到, INI里面再INIT, 不是重复加载了吗? INIT加个参数比较好, 其它不要,毕竟只是WIN10才需要.  详情 回复 发表于 2015-10-11 07:48
    回复

    使用道具 举报

    11065#
    发表于 2015-10-10 22:13:16 | 只看该作者
    M大,请问怎么获取含有UD分区的磁盘盘符?

    例如 fbinst.exe --hdlist 可以列出所有磁盘信息并用*号标识含有UD分区的磁盘,从而获取盘符。

    请问用PECMD怎样实现?只需要加载PE时或进入PE后获取含有UD分区的磁盘盘符。
    回复

    使用道具 举报

    11066#
     楼主| 发表于 2015-10-10 22:54:52 | 只看该作者
    本帖最后由 mdyblog 于 2015-10-10 23:01 编辑
    lps4290 发表于 2015-10-10 22:13
    M大,请问怎么获取含有UD分区的磁盘盘符?

    例如 fbinst.exe --hdlist 可以列出所有磁盘信息并用*号标识 ...


    1. PART LIST DISK ,&&DSKS
    2. FORX * %&DSKS%,&&dsk,
    3. {*   
    4.     MOUN-udm listud -ret:  &&V  -udmask: 0x100000  \\.\PhysicalDrive%&dsk%
    5.     FIND $%&V%=, EXIT -
    6.     PART list part %&dsk%, &&prts
    7.     SET &Drvs=
    8.     FORX * %&prts%,&&prt,
    9.     {*  PART -iv=8 list part %&dsk%:%&prt%, &&Drv
    10.         FIND $%&Drv%<>, SET Drvs=%&Drvs% %&Drv%
    11.     }
    12.     MESS UD: hd%dsk%  %&Drvs%
    13. }
    复制代码

    点评

    谢了M大,这样我就可以弃用fbinst.exe了。 学习多了,发现很多第三方工具都不需要了, 像整理盘符脚本什么的,感谢M大的付出!  详情 回复 发表于 2015-10-14 00:15
    回复

    使用道具 举报

    11067#
    发表于 2015-10-11 01:32:17 | 只看该作者
    本帖最后由 huaqingyuan 于 2015-10-11 01:33 编辑

    老大 我们知道rundll32 netplwiz.dll,UsersRunDll,就是调用netplwiz.dll的UsersRunDll函数
    那么用CALL 调用netplwiz.dll怎么实现呢?
    call $netplwiz.dll,UsersRunDll,
    还有
    call $netplwiz.dll,UsersRunDllW,
    都不对,应该怎么写呢?

    点评

    老大 我们知道rundll32 netplwiz.dll,UsersRunDll,就是调用netplwiz.dll的UsersRunDll函数 ------------------------------ rundll32 netplwiz.dll,UsersRunDll,[/backcolor] 这样对吗? 即使换成半角, run  详情 回复 发表于 2015-10-11 08:37
    试试 call $netplwiz.dll,UsersRunDll 还有 call $netplwiz.dll,UsersRunDllW  详情 回复 发表于 2015-10-11 08:07
    回复

    使用道具 举报

    11068#
    发表于 2015-10-11 07:48:15 | 只看该作者
    mdyblog 发表于 2015-10-10 21:29
    这个PECMDX64 内置了WoW64补丁。 大家测试下。
    在MAIN 和 INIT指令时自动执行。

    MAIN,使用PECMD就会用到,

    INI里面再INIT, 不是重复加载了吗?

    INIT加个参数比较好, 其它不要,毕竟只是WIN10才需要.

    点评

    1: 不会重复,内部判断 2:内部判读,  详情 回复 发表于 2015-10-11 08:06
    回复

    使用道具 举报

    11069#
     楼主| 发表于 2015-10-11 08:06:44 | 只看该作者
    2012bzsb 发表于 2015-10-11 07:48
    MAIN,使用PECMD就会用到,

    INI里面再INIT, 不是重复加载了吗?

    1: 不会重复,内部判断

    2:内部判读,<win10不执行。
    回复

    使用道具 举报

    11070#
     楼主| 发表于 2015-10-11 08:07:08 | 只看该作者
    本帖最后由 mdyblog 于 2015-10-11 09:40 编辑

    huaqingyuan 发表于 2015-10-11 01:32
    老大 我们知道rundll32 netplwiz.dll,UsersRunDll,就是调用netplwiz.dll的UsersRunDll函数
    那么用CALL 调 ...

    试试
    CALL $--win netplwiz.dll,UsersRunDll,






    RUNDLL32 有些 隐含参数,--win 就是自动补上隐含参数。同时,真正的参数格式,完全不是你看到的那样。
    固定4个参数
    参数1  参数2  参数3  参数4
    参数1  参数2  参数4 是隐含

    参数3 是 rundll32 函数名后面 整个参数表,格式固定为字符串,里面的半角逗号也是串内的一个字符,不能作为参数分隔
    RUNDLL32 DLl,FUN AAA,BBBB,CCC
    这里 AAA,BBBB,CCC 整个是 参数3
    为隐藏其中的逗号,包装成一个字符串&FullParam,用 *FullParam作为参数,CALL $就看不到这些逗号。
    SET &FullParam=AAA,BBBB,CCC
    CALL $DLL,FUN,#%&__WinID%,#%&__HINST%,*FullPARAM,#5
      
    实际为:
    1. SET &FullPARAM=
    2. CALL $netplwiz.dll,UsersRunDll,#%&__WinID%,#%&__HINST%,*FullPARAM,#5
    复制代码


    FullPARAM中没半角逗号,所以,也可直接写为:
    1. CALL $netplwiz.dll,UsersRunDll,#%&__WinID%,#%&__HINST%,$,#5
    复制代码


    加个 --win 开关, PECMD自动处理,就没那么多事。

    PECMD补充说明.doc---52#
    回复

    使用道具 举报

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

    本版积分规则

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

    闽公网安备 35020302032614号

    GMT+8, 2025-12-27 06:14

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

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