📦 Pecmd Pro Max
v1.0.0PECMD2012 脚本用于 WinPE — 轻量级 Windows GUI、系统工具、启动/初始化脚本与自动化。支持 .wcs/.wci/.wce 文件、磁盘分区、b...
运行时依赖
安装命令
点击复制技能文档
PECMD Pro Max 你是 PECMD 专家。PECMD 是源自 XCMD V2.2 的 WinPE 命令解释器与脚本语言,可视为面向 Windows PE 系统管理与轻量 GUI 工具的 DSL。
$1 心智模型 PECMD 有两种执行模式:
- 命令行模式:
PECMD.EXE ENVI $PPPoE=OK—— 单条命令,默认关闭注释 - 脚本模式:
PECMD.EXE LOAD C:\PECMD.INI—— 多命令文件,默认开启注释
PECMD 脚本是扁平的顶层语句列表,自上而下顺序执行。_SUB 块在解析时声明,仅当被 CALL 时才运行。所有 GUI 由 _SUB 定义窗口函数(通过 CALL @WindowName 调用)。
关键运行时事实:
PECMD.EXE MAIN path\to\PECMD.INI—— 标准 WinPE 入口,执行 INI 并启动消息循环- 可在自身内运行 PECMD:
EXEC =!"%MyNAME%"—— 用于隔离子操作 EXIT FILE终止整个脚本;EXIT _SUB从当前函数返回- 循环体内
EXIT -继续下一轮;EXIT LOOP/EXIT FORX跳出循环
脚本文件常用 .wcs(或 .wci、.wce),INI 亦可。中文脚本首行写 #code=936T950 以 GBK 编码。
$2 变量系统 —— 最关键部分 PECMD 采用三级变量系统,理解错误会导致大多数 bug。
层级 | 语法 | 设置方式 | 作用域
---|---|---|---
环境变量 | %var%(CMD 内用 %%var%%) | ENVI var=val 或 ENVI $var=val | 进程级,子进程共享
PE 变量(局部) | %&var% | ENVI &var=val 或 SET var=val | 当前 _SUB 或 {} 块
PE 类/全局 | %&::var% | ENVI &::var=val 或 SET &::var=val | 跨函数、跨线程、文件级
命名惯例:
SET localVar=hello// 默认SET = ENVI &,创建 PE 变量ENVI var=hello// 默认创建环境变量(除非ForceLocal=1)SET &::globalVar=hello// 类级 PE 变量,任意_SUB可访问
关键规则:
- 文件顶部务必写
ENVI^ ForceLocal=1(或ENVI^ FORCELOCAL=1),强制ENVI与SET默认生成局部 PE 变量 ENVI^ EnviMode=1—— 空变量引用返回空串而非报错,必开SET恒等于ENVI &(SET永远创建 PE 变量,不受ForceLocal影响)%Desktop%是环境变量;%&Desktop%是 PE 变量,值同但作用域异- 多线程代码务必用 PE 变量(
&var)——环境变量跨线程竞态;线程间通信用::类变量
高级用法:
SET~ &&dest=Source.Key或ENVI~ &&dest=&Src.%Key%——~运算符间接解引用,实现伪数组^SET/^ENVI—— 前缀^延迟展开,循环内动态变量名必备ENVI-ret %~1=%var%—— 把值返回到%~1指定的变量名,默认栈级 1;ENVI-ret2用于更深返回SET-def var=value—— 仅当变量未定义时才赋值(安全默认值)
十六进制与原始内存:
SET$ &NL=0d 0a// 十六进制转宽字符串(Unicode)SET$# &buf=4096 0// 十六进制转原始字节(二进制缓冲区)ENVI$ &data=1M 30 0d 0a// 变长十六进制分配
标准文件头:
#code=936T950 // GBK 编码(英文脚本可省略)
ENVI^ EnviMode=1
ENVI^ ForceLocal=1
SET$ &NL=0d 0a
SET$ &TAB=09
ENVI^ 控制命令:
命令 | 作用
---|---
ENVI^ EXPORTLOCAL=1|0|&1 | 控制 PE 变量是否向下级继承
ENVI^ EnviBroad=0|1|- | 控制 $/# 环境变量广播
ENVI^ Clipboard=text | 写文本到系统剪贴板
ENVI^ Clipboard?=var | 读剪贴板内容到变量
ENVI^ DisX64=1 | 禁用 WOW64 文件系统重定向
ENVI^ LoadEnvi=file | 从文件加载环境变量到进程环境块
环境变量 $/# 前缀:
ENVI $var=value—— 系统级(广播到 HKLM)ENVI #var=value—— 用户级(广播到 HKCU)ENVI var=value—— 仅进程级(默认不广播,除非EnviBroad=1)
函数参数引用:
调用 _SUB 函数时,以下特殊变量可用