无忧启动论坛

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

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

    [复制链接]
发表于 2021-1-16 21:18:42 来自手机 | 显示全部楼层
feiyike 发表于 2021-1-16 20:11
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Fil ...

综合考虑,我觉得你这种情况前后加个分号可能更好
回复

使用道具 举报

发表于 2021-1-16 21:43:36 | 显示全部楼层
红毛樱木 发表于 2021-1-16 21:15
变量传进去的就没关系,不是变量传的才要特殊处理的吧,我是这么理解的
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files\FAST\CAD;
ENVI &BB=C:\Program Files (x86)\Common Files\FAST\CAD


SED *ni &SS=0,C:\\Program Files \(x86\)\\Common Files\\FAST\\CAD,,%&AA%

这样就能处理,可是没法用变量&BB传递了

点评

这样也行,-ts为字符串集翻译  详情 回复 发表于 2021-1-17 01:18
笨方法搞的,试试看。  详情 回复 发表于 2021-1-16 22:22
用SED把&BB里的所有符号替换为\+符号的形式 应该就行了,我不会写。 比如 (换成\(  详情 回复 发表于 2021-1-16 22:16
正则表达式 我真的不会,每次我都请教人。等高手来。  详情 回复 发表于 2021-1-16 22:11
回复

使用道具 举报

发表于 2021-1-16 22:11:10 | 显示全部楼层
feiyike 发表于 2021-1-16 21:43
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files ...

正则表达式 我真的不会,每次我都请教人。等高手来。
回复

使用道具 举报

发表于 2021-1-16 22:16:08 | 显示全部楼层
feiyike 发表于 2021-1-16 21:43
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files ...

用SED把&BB里的所有符号替换为\+符号的形式  应该就行了,我不会写。
比如
(换成\(
回复

使用道具 举报

发表于 2021-1-16 22:22:50 | 显示全部楼层
feiyike 发表于 2021-1-16 21:43
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files ...
  1. ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files\FAST\CAD;
  2. ENVI &BB=C:\Program Files (x86)\Common Files\FAST\CAD
  3. SED -ex &BB=0,\\,\\\\,&BB
  4. //MESS. %&BB%
  5. SED -ex &BB=0,\(,\\(,&BB
  6. //MESS. %&BB%
  7. SED -ex &BB=0,\),\\),&BB
  8. //MESS. %&BB%
  9. ENVI< &BB=;
  10. SED -ex -ex -ex &SS=0,&BB,,&AA
  11. MESS. %&SS%
复制代码


笨方法搞的,试试看。
回复

使用道具 举报

发表于 2021-1-17 01:18:19 | 显示全部楼层
feiyike 发表于 2021-1-16 21:43
ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files ...
  1. ENVI &AA=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\Common Files\FAST\CAD;
  2. ENVI &BB=C:\Program Files (x86)\Common Files\FAST\CAD
  3. ENVI< &BB=;
  4. SED -ts -ex -ex -ex &SS=0,&BB,,&AA
  5. MESS. %&SS%
复制代码
这样也行,-ts为字符串集翻译
最新版才支持
-ex [-ex [-ex]原始串[正则串[替换]]为变量名

点评

感谢! ENVI> %&V%=; ENVI< %&V%=; 这种用法之前不知道,查帮助也没找到,有没有类似用法,用于删除字符  详情 回复 发表于 2021-1-17 10:18
回复

使用道具 举报

发表于 2021-1-17 09:37:24 | 显示全部楼层
红毛樱木 发表于 2021-1-16 21:16
pecmd的内存操作基本和c语言一样,我感觉这么回事,只不是可能平时用VS看上去一目了然一些

接触的少,自从 脚本能解决 问题,我很少编译程序了。
进入 V 时代,就更不咋接触了

判断 uefi 的,我暂时 这样解决了。
用 GetFirmwareEnvironmentVariableW 读取 buf 的 还是 没搞明白。

  1.    
  2.     ENVI$# &ret=*4 0     //申请4个窄字符空间,也可以用   ENVI$ &ret=*2 0 //申请2个宽字符空间
  3.     CALL $--qd --bool --ret:&&r Kernel32.dll,GetFirmwareType,*&ret
  4.     FIND $%&&r%=,
  5.     {*
  6.         //为空,可以认为没有返回数据,当前环境不支持此API,低于Win8版本的系统
  7.         //MESS. 不支持此API。
  8.                 CALL $ --ret:r Kernel32.dll,GetFirmwareEnvironmentVariableW,"",{00000000-0000-0000-0000-000000000000},0,0
  9.                 CALL $ --ret:mode1 Kernel32.dll,GetLastError, ""
  10.                 IFEX $%mode1% = 1 ,mess Legacy! find $%mode1%=998 ,mess UEFI ! mess Unknow
  11.     }!  
  12.     {*
  13.         IFEX #%&&r%=0,MESS API Error.!  
  14.         {*
  15.             ENVI?int &ret=&ret1
  16.             IFEX #%&ret1%=0,MESS Unknow0。
  17.             IFEX #%&ret1%=1,MESS legacy
  18.             IFEX #%&ret1%=2,MESS UEFI
  19.             IFEX #%&ret1%=3,MESS Unknow9
  20.         }
  21.     }
复制代码
回复

使用道具 举报

发表于 2021-1-17 10:18:15 | 显示全部楼层
本帖最后由 feiyike 于 2021-1-17 13:30 编辑
红毛樱木 发表于 2021-1-17 01:18
这样也行,-ts为字符串集翻译
最新版才支持
-ex [-ex [-ex]原始串[正则串[替换]]为变量名

感谢!
ENVI>  %&V%=;
ENVI<  %&V%=;
这种用法之前不知道,查帮助也没找到,有没有类似用法,用于删除字符

点评

ENVI> &V=; ===> ENVI &V=;%&V% ENVI< &V=; ===> ENVI &V=%&V%;  详情 回复 发表于 2021-1-17 11:51
回复

使用道具 举报

发表于 2021-1-17 11:51:09 | 显示全部楼层
feiyike 发表于 2021-1-17 10:18
感谢!
ENVI>  %&V%=;
ENVI<  %&V%=;

ENVI>  &V=;      ===>      ENVI  &V=;%&V%
ENVI<  &V=;      ===>      ENVI  &V=%&V%;

点评

多谢5大 想请教有没有类似 ENVI> &V=; 用于删除字符,感觉这样很简洁  详情 回复 发表于 2021-1-17 13:37
回复

使用道具 举报

发表于 2021-1-17 13:37:28 | 显示全部楼层
527104427 发表于 2021-1-17 11:51
ENVI>  &V=;      ===>      ENVI  &V=;%&V%
ENVI<  &V=;      ===>      ENVI  &V=%&V%;

多谢5大
想请教有没有类似   ENVI>  &V=;   用于删除字符,感觉这样很简洁

点评

SET$ &NL=0D 0A SET &A=123456789 MSTR * &B=2,0,&A //左边删1个字符 MSTR * &C=3,0,&A //左边删2个字符 MSTR * &D=4,0,&A //左边删3个字符 MSTR * &E=-2,0,&A //右边删1个字符 MSTR * &F=-3,0,&A  详情 回复 发表于 2021-1-17 18:26
回复

使用道具 举报

发表于 2021-1-17 18:26:57 | 显示全部楼层
feiyike 发表于 2021-1-17 13:37
多谢5大
想请教有没有类似   ENVI>  &V=;   用于删除字符,感觉这样很简洁

SET$ &NL=0D 0A
SET &A=123456789

MSTR * &B=2,0,&A   //左边删1个字符
MSTR * &C=3,0,&A   //左边删2个字符
MSTR * &D=4,0,&A   //左边删3个字符

MSTR * &E=-2,0,&A   //右边删1个字符
MSTR * &F=-3,0,&A   //右边删2个字符
MSTR * &G=-4,0,&A   //右边删3个字符

MESS.  [A=%&A%]
\%&NL% [B=%&B%]
\%&NL% [C=%&C%]
\%&NL% [D=%&D%]
\%&NL% [E=%&E%]
\%&NL% [F=%&F%]
\%&NL% [G=%&G%]

点评

多谢!!  详情 回复 发表于 2021-1-17 19:31
回复

使用道具 举报

发表于 2021-1-17 19:31:55 | 显示全部楼层
527104427 发表于 2021-1-17 18:26
SET$ &NL=0D 0A
SET &A=123456789

多谢!!
回复

使用道具 举报

发表于 2021-1-19 19:56:25 | 显示全部楼层
本帖最后由 527104427 于 2021-1-19 19:59 编辑
mdyblog 发表于 2021-1-15 17:43
"\ArcName\multi(0)disk(0)rdisk(0)partition(2)"  "\Device\Harddisk0\Partition2"  "\Device\HarddiskV ...

发现两个问题,如图:

11111.jpg


ENVI &&Drv=Y:
exec =imdisk -a -o awe -m %&Drv% -s 32M -p "/fs:NTFS /q /y"
WAIT 5000
EXEC*- -timeout:1000 -incmd &&A=pecmd TEAM PART list drv %&Drv%,&&B| WRIT *fv -,$+0,&&B
//PART list drv %&Drv%,&&A
MESS. [%&A%]
exec =imdisk -d -m %&Drv%
exec =imdisk -D -m %&Drv%




问题1:PART list drv %&Drv%,&&A     会报错
问题2:EXEC*- -timeout:1000 -incmd &&A=pecmd TEAM PART list drv %&Drv%,&&B| WRIT *fv -,$+0,&&B     不能自动关闭报错窗口






点评

修正了, 仙下载 新版  详情 回复 发表于 2021-1-22 18:37
回复

使用道具 举报

发表于 2021-1-21 19:53:15 | 显示全部楼层
新建文件夹什么命令?
WRIT FLNK 都需要实际存在的目录,查帮助没找到

点评

PATH D:\ABC  详情 回复 发表于 2021-1-22 09:00
MDIR  详情 回复 发表于 2021-1-21 20:02
回复

使用道具 举报

发表于 2021-1-21 20:02:42 | 显示全部楼层
feiyike 发表于 2021-1-21 19:53
新建文件夹什么命令?
WRIT FLNK 都需要实际存在的目录,查帮助没找到

MDIR
回复

使用道具 举报

发表于 2021-1-21 20:20:50 | 显示全部楼层

眼睛有问题呀!!
回复

使用道具 举报

 楼主| 发表于 2021-1-22 09:00:49 | 显示全部楼层
feiyike 发表于 2021-1-21 19:53
新建文件夹什么命令?
WRIT FLNK 都需要实际存在的目录,查帮助没找到

PATH   D:\ABC
回复

使用道具 举报

 楼主| 发表于 2021-1-22 18:37:43 | 显示全部楼层
527104427 发表于 2021-1-19 19:56
发现两个问题,如图:

修正了, 下载 新版

点评

这个问题解决了。 还有一个问题, PART -drv list volume 能适配一下这种格式不:\Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750},目前是获取不到盘符的 PE的X盘就是这种格式的卷名,获取方法是用老大以  详情 回复 发表于 2021-1-22 22:52
回复

使用道具 举报

发表于 2021-1-22 22:52:29 | 显示全部楼层
mdyblog 发表于 2021-1-22 18:37
修正了, 下载 新版

这个问题解决了。
还有一个问题,
PART -drv list volume 能适配一下这种格式不:\Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750},目前是获取不到盘符的
PE的X盘就是这种格式的卷名,获取方法是用老大以前写的命令:

REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemBootDevice,&&arcname
CALL GetSymbolic "\ArcName\%&arcname%" &&volume
mess. [%&volume%]   //\Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750}

_SUB GetSymbolic
        CALL _INITVAR
        SET &nm=%~1
        SET$ &hb=*8 0 //HANDLE
        SET$ &Attr=*48 0 //OBJECT_ATTRIBUTES
        SET$ &arcName=*16 0 //UNICODE_STRING
        SET$ &retName=*16 0 //UNICODE_STRING
        CALL $--qd --ret:&&ret ntdll.dll,RtlInitUnicodeString,*&arcName,*&nm
        ENVI-addr &&arcName_ptr=&arcName
        SET$ &buf=*4096 0
        ENVI-addr &&buf_ptr=&buf
        SET-long retName=8192:2 //retName.MaximumLength = 4096 * 2
        SET-ptr retName=%&buf_ptr%:%PtrSz% //retName.Buffer = buf
        CALL InitializeObjectAttributes &Attr %&arcName_ptr% %&OBJ_CASE_INSENSITIVE% 0 0
        CALL $--qd --ret:&&ret Ntdll.dll,NtOpenSymbolicLinkObject,*&hb,#%SYMBOLIC_LINK_QUERY%,*&Attr
        SET?ptr hb=&&h       
        CALL $--qd --ret:&&ret Ntdll.dll,NtQuerySymbolicLinkObject,#%h%,*&retName,#0
        CALL $--qd --ret:&&ret Kernel32.dll,CloseHandle,#%h%
        ENVI-ret %~2=%&buf%
_END

_SUB InitializeObjectAttributes //p  n  a  r  s
        CALC &&Sz=6*%PtrSz%
        ENVI-long %~1=%&Sz%:0 //(p)->Length = sizeof(OBJECT_ATTRIBUTES);
        ENVI-ptr  %~1=%~4:%PtrSz% //(p)->RootDirectory = r
        ENVI-ptr  %~1=%~2:(%PtrSz%*2) //(%PtrSz%+%PtrSz%)  //(p)->ObjectName = n
        ENVI-long %~1=%~3:(%PtrSz%*3) //(%PtrSz%+%PtrSz%+%PtrSz%)  //(p)->Attributes = a
        ENVI-ptr  %~1=%~5:(%PtrSz%*4) //(%PtrSz%+%PtrSz%+%PtrSz%+%PtrSz%)  //(p)->SecurityDescriptor = s
        //ENVI-ptr  %~1=0:(%PtrSz%*5) //(p)->SecurityQualityOfService = NULL
_END

_SUB _INITVAR *
        IFEX #%&bX64%=3, Set &PtrSz=8! SET &PtrSz=4
        SET &OBJ_CASE_INSENSITIVE=0x00000040
        SET &SYMBOLIC_LINK_QUERY=0x0001
        SET &FILE_SHARE_RW=0x00000003
        SET &OPEN_EXISTING=3
        CALC #&sizeofMOUNTMGR_MOUNT_POINT=4*3+2*6
        CALC -base=16 #&&IOCTL_MOUNTMGR_QUERY_POINTS=shl(0x0000006D,16) | shl(2,2) //CTL_CODE(MOUNTMGRCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
_END




点评

关键是 part list drv 关键是虚拟设备 不知道 特征信息 不知道怎么和 盘符配对。  详情 回复 发表于 2021-1-23 07:33
回复

使用道具 举报

 楼主| 发表于 2021-1-23 07:33:44 | 显示全部楼层
527104427 发表于 2021-1-22 22:52
这个问题解决了。
还有一个问题,
PART -drv list volume 能适配一下这种格式不:\Device\Ramdisk{d9b2 ...

关键是 part list drv

关键是虚拟设备 不知道 特征信息
不知道怎么和 盘符配对。

点评

发现新版的PART list dep突然又不行了。 PART list dep 4,&AMESS. [%&A%] 设备4为挂载的VHD磁盘,上面的命令已经找不到源文件了。 另外,能否直接用盘符呢,像这样: PART list dep F:,&A  详情 回复 发表于 2021-1-23 11:59
回复

使用道具 举报

发表于 2021-1-23 11:59:50 | 显示全部楼层
本帖最后由 527104427 于 2021-1-23 12:04 编辑
mdyblog 发表于 2021-1-23 07:33
关键是 part list drv

关键是虚拟设备 不知道 特征信息

发现新版的 PART list dep 突然又不行了。
PART list dep 4,&A
MESS. [%&A%]

设备4为挂载的VHD磁盘,上面的命令已经找不到源文件了。


另外,能否直接用盘符呢,像这样:
PART list dep F:,&A
====================================================

原来是64位系统中运行32位PECMD不行了,64位系统运行64位PECMD返回是这样的:\\?\Volume{cba9a44b-7f04-11e9-9758-806e6f6e6963}\aa     b    c空.VHD
旧版PECMD,返回   D:\aa     b    c空.VHD,能改回原来的样子不

















点评

WIn7下, 用同位数的 PECMD。 可能 Win7 SysWow64不完善。 LISP Volume 试试这个:  详情 回复 发表于 2021-1-23 13:15
回复

使用道具 举报

 楼主| 发表于 2021-1-23 13:15:59 | 显示全部楼层
本帖最后由 mdyblog 于 2021-1-23 16:45 编辑
527104427 发表于 2021-1-23 11:59
发现新版的 PART list dep 突然又不行了。
PART list dep 4,&A
MESS. [%&A%]

WIn7下, 用同位数的 PECMD。 可能 Win7 SysWow64不完善。


LISP Volume   试试最新版: (网盘)

PART -drv  list volume  \Device\ImDisk1,&V
MESS. %&V%


点评

经测试,PART -drv list volume \Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750},&V 确实可以了。 安装了 64 位 win10-20h2 和 64 位 win10-2016_ltsb 测试了一下,32位PECMD运行 PART list dep F:,&A  详情 回复 发表于 2021-1-23 22:25
回复

使用道具 举报

发表于 2021-1-23 22:25:54 | 显示全部楼层
mdyblog 发表于 2021-1-23 13:15
WIn7下, 用同位数的 PECMD。 可能 Win7 SysWow64不完善。

经测试,PART -drv  list volume  \Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750},&V
确实可以了。

安装了 64 位 win10-20h2 和 64 位 win10-2016_ltsb 测试了一下,32位PECMD运行 PART list dep F:,&A 的确是正常的,看来是win7的锅,不知道需要哪些DLL呢,我从win10复制过来 可行不?


点评

VirtDisk.DLL  详情 回复 发表于 2021-1-24 00:02
回复

使用道具 举报

 楼主| 发表于 2021-1-24 00:02:21 | 显示全部楼层
527104427 发表于 2021-1-23 22:25
经测试,PART -drv  list volume  \Device\Ramdisk{d9b257fc-684e-4dcb-ab79-03cfa2f6b750},&V
确实可以 ...

VirtDisk.DLL

点评

老大看看可否这样呢: -timeout:[#]毫秒数[:错误码] 等待超时 #则不杀进程 +则杀子进程  详情 回复 发表于 2021-1-24 19:24
EXEC -timeout 可以加个参数杀子进程不,类似于 KILL -tree 比如下面这个报错 [attachimg]473828[/attachimg] 就是由于PECMD崩溃,再由子进程弄出来的弹窗,用FIND查找该弹窗的结果就是: 7704 2964 12  详情 回复 发表于 2021-1-24 12:41
好的,多谢  详情 回复 发表于 2021-1-24 08:58
回复

使用道具 举报

发表于 2021-1-24 08:58:42 | 显示全部楼层

好的,多谢
回复

使用道具 举报

发表于 2021-1-24 12:41:19 | 显示全部楼层

EXEC   -timeout  可以加个参数杀子进程不,类似于   KILL -tree
比如下面这个报错
1111111111.jpg

就是由于PECMD崩溃,再由子进程弄出来的弹窗,用FIND查找该弹窗的结果就是:

7704        2964        12144        10140065        132559366249328612        C:\Windows\SysWOW64\WerFault.exe        C:\Windows\SysWOW64\WerFault.exe -u -p 3820 -s 344

点评

出错 提示进程 可出错进程 没有父子关系。 提示 是系统代理的。进程父子关系如图: [attachimg]473931[/attachimg]  详情 回复 发表于 2021-1-24 21:45
※-timeout:[#]毫秒数[:错误码] 等待超时 #则不杀进程; 这个是不是就是自带默认杀进程? 或者利用 错误码判断一下是否需要啥子进程。  详情 回复 发表于 2021-1-24 17:57
回复

使用道具 举报

发表于 2021-1-24 17:57:32 | 显示全部楼层
本帖最后由 红毛樱木 于 2021-1-24 19:21 编辑
527104427 发表于 2021-1-24 12:41
EXEC   -timeout  可以加个参数杀子进程不,类似于   KILL -tree
比如下面这个报错


搞错了

点评

子进程  详情 回复 发表于 2021-1-24 18:25
回复

使用道具 举报

发表于 2021-1-24 19:24:58 | 显示全部楼层
本帖最后由 527104427 于 2021-1-24 19:34 编辑

老大看看可否这样呢:
-timeout:[+|#]毫秒数[:错误码] 等待超时 #则不杀进程  +则杀子进程

点评

EXEC -timeout:3000 PECMD MESS AAAA杀 EXEC -timeout:#3000 PECMD MESS BBBB不杀 MESS END  详情 回复 发表于 2021-1-24 19:59
回复

使用道具 举报

 楼主| 发表于 2021-1-24 19:59:54 | 显示全部楼层
527104427 发表于 2021-1-24 19:24
老大看看可否这样呢:
-timeout:[+|#]毫秒数[:错误码] 等待超时 #则不杀进程  +则杀子进程

EXEC  -timeout:3000  PECMD MESS  AAAA杀
EXEC  -timeout:#3000  PECMD MESS  BBBB不杀
MESS END

点评

我再举个例子吧: EXEC -timeout:2000 -incmd =pecmd TEAM thread mess-x:100-y:100 ok1| exec -incmd =pecmd mess-x:100-y:200 ok2 这时只会杀一个子进程,而不会杀另一个子进程,当子进程有n个的时候,或者子  详情 回复 发表于 2021-1-24 21:44
回复

使用道具 举报

发表于 2021-1-24 21:44:15 | 显示全部楼层
mdyblog 发表于 2021-1-24 19:59
EXEC  -timeout:3000  PECMD MESS  AAAA杀
EXEC  -timeout:#3000  PECMD MESS  BBBB不杀
MESS END

我再举个例子吧:
EXEC -timeout:2000 -incmd =pecmd TEAM thread mess-x:100-y:100 ok1| exec -incmd =pecmd mess-x:100-y:200 ok2

这时只会杀一个子进程,而不会杀另一个子进程,当子进程有n个的时候,或者子进程又衍生出孙进程的时候,就杀不掉了。

点评

EXEC -timeout:*2000 -incmd =pecmd TEAM thread mess-x:100-y:100 ok1| exec -incmd =pecmd mess-x:100-y:200 ok2  详情 回复 发表于 2021-1-24 23:21
EXEC -timeout:2000 -pid:&pid -incmd =pecmd TEAM thread mess-x:100-y:100 ok1| exec -incmd =pecmd mess-x:100-y:200 ok2 FIND #%&pid%>0,!! KILL -tree *%&pid%  详情 回复 发表于 2021-1-24 21:51
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 22:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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