|
本帖最后由 mdyblog 于 2015-3-13 10:51 编辑
问题不是 PECMD, 而是widdows系统 的设计 就是这样——一切高级系统都这样: 环境变量是隔离的,一个进程不能改变另外一个进程的变量。
CMD调用所用EXE都这样
只能进程通讯,拿到信息,在自己设置一下
方法3:输出法 (传回多个,最好)
@echo off
set a=
set b=
set c=
FOR /F "usebackq tokens=1*" %%i IN (`PECMD LOAD ccc.wcs`) DO SET %%i=%%j
reg del %tmpr% HKCU\PECMD_U /v %tmprn% /f > NUL 2>NUL
echo a=[%a%]
echo b=[%b%]
echo c=[%c%]
pause
其中ccc.wcs:
WRIT -,$+0,a 111 cc ddd eee fff
WRIT -,$+0,b 222 cc ddd eee fff
WRIT -,$+0,c "222 cc ddd eee fff"
//方法: WRIT -,$+0,变量名 变量值
方法2:临时文件法 (最简单好用)
@echo off
SET tmpf=tmp~%RANDOM%.CMD
echo. >%tmpf%
PECMD.EXE WRIT %tmpf%,$+0,set a=bbb
CALL .\tmp1.CMD
del %tmpf% > NUL 2>NUL
echo a=[%a%]
pause
方法3:注册表法
@echo off
@IF "%~1"==":GETREG" goto :GETREG
SET tmprn=cmdenv-%RANDOM%_a
SET tmprB=HKCU\PECMD_U
reg del %tmpr% HKCU\PECMD_U /v %tmprn% /f > NUL 2>NUL
PECMD.EXE REGI %tmprB%\%tmprn%=bbb CCC ddd
::读取 HKCU\PECMD_U /v %tmprn% 并保存到变量 a
FOR /F "usebackq tokens=1,2*" %%i IN (`%0 :GETREG`) DO SET a=%%k
reg del %tmpr% HKCU\PECMD_U /v %tmprn% /f > NUL 2>NUL
echo a=[%a%]
pause
goto :eof
:GETREG
@reg query HKCU\PECMD_U /v %tmprn% | find "%tmprn%"
@goto :eof
|
|