本帖最后由 uhnmki 于 2013-8-12 17:44 编辑
感谢 gawk:
版排的很好看,是用专门的批处理编辑排版工具做的吗,哪里有,也给我一份。
有几个问题:
① 批处理 if 里能不能用"=="比较两个字符串?用 equ 相比有什么不同之处?
② set "str=path=%TEMP%\" set 赋值用引号吗?引号里面2个"=" 能被 cmd 正确执行吗?
③ move 是外部命令还是内部命令,早先DOS6.22下move是个外部命令,若是cmd下还需要
外部命令move的话,那还不如笨点,先del,再ren,这样不必再往PE系统里拷进move程序。
④ >>%TEMP%\wincmd.tmp echo,!str! 写的顺序和 echo,!str! >>%TEMP%\wincmd.tmp
相反,cmd 里可以这样用?这样写的好处是?
在你给的基础上我又改了一下,不过这回我先不定义各变量,等找到节/参数条目了才定义,
借变量是否有定义可以判断:是否正在某节中读取及是否已完成对该节中的参数条目的修改。
不知道这么做是否可行?
此外我还要增加修改 wincmd.ini 的另一个参数,即在[Packer]节里设置外部压缩软件的路径:
[Packer]
RAR=光盘盘符\PROGRAMS\SYSTEM\WINRAR\WINRAR.EXE(或者用 rar.exe)
已确定要将此脚本放在光盘上,所在光盘盘符可由如下脚本得知:
SET Var0=%0
FOR /f "delims=" %%I in ("%Var0%") do Set OP=%%~dI
以上2句是抄来的,虽不明白%%~dI怎么回事,但知道变量%OP%保存的就是光盘盘符。
就是说,本脚本运行后还要将[Packer]中"RAR="原来的路径替换为:
RAR=%OP%\PROGRAMS\SYSTEM\WINRAR\WINRAR.EXE(rar.exe亦可)。
以下是新程序:- REM %OP%为侦测得知的光盘盘符(本脚本存放在光盘上)。
- SET Var0=%0
- FOR /f "delims=" %%o in ("%Var0%") do Set OP=%%~dI
-
- REM a=true 即表明已找到[left]节
- REM b=true 则表明已找到[right]节
- REM c=true 则表明已找到[LeftHistory]节
- REM d=true 则表明已找到[RightHistory]节
-
- REM e=true 即表明已完成[left]节中的 path= 字串替换
- REM f=true 则表明已完成[right]节中的 path= 字串替换
- REM g=true 则表明已完成[LeftHistory]节的 0= 字串替换
- REM h=true 则表明已完成[RightHistory]节的 0= 字串替换
-
- REM i=true 则表明已找到[Packer]节
- REM j=true 后表明已完成[Packer]节的 RAR= 字串替换
-
- for /f "eol=,usebackq,tokens=*,delims=" %%k in (%TEMP%\tcmd\wincmd.ini) do (
- set str=%%k
- setlocal enabledelayedexpansion
- REM [left]
- if not defined a (if !str!=="[left]" set a=true
- ) else (if not defined e (if !str:~0,5!=="path=" (
- set "str=path=%TEMP%\"
- set e=true
- )
- )
- )
- REM [right]
- if not defined b (if !str!=="[right]" set b=true
- ) else (if not defined f (if !str:~0,5!=="path=" (
- set "str=path=%TEMP%\tcmd\"
- set f=true
- )
- )
- )
- REM [LeftHistory]
- if not defined c (if !str!=="[LeftHistory]" set c=true
- ) else (if not defined g (if !str:~0,2!=="0=" (
- set "str=0=%TEMP%\"
- set g=true
- )
- )
- )
- REM [RightHistory]
- if not defined d (if !str!=="[RightHistory]" set d=true
- ) else (if not defined h (if !str:~0,2!=="0=" (
- set "str=0=%TEMP%\tcmd\"
- set h=true
- )
- )
- )
- REM [Packer]
- if not defined i (if !str!=="[Packer]" set i=true
- ) else (if not defined j (if !str:~0,4!=="RAR=" (
- set "str=RAR=!OP!\PROGRAMS\SYSTEM\WINRAR\WINRAR.EXE"
- set j=true
- )
- )
- )
- endlocal
- echo,!str! >>%TEMP%\wincmd.tmp
- )
- move /y %TEMP%\wincmd.tmp %TEMP%\wincmd.ini
复制代码 【解释】
1) for /f "eol=,……" %%k in (……)……
想用"eol=空值"开关,避免 cmd 弃读以分号";"开头的行
2) for /f "usebackq,……" %%k in (……)……
想用"usebackq"开关,允许变量 %TEMP% 里含单引号和空格等多义字符,不知这招能行否?
感谢 zz100001
查了下,iniman.exe 好像是 Win2003 包里的,能以脚本方式用在WinPE里吗?
本来要把 wincmd.ini 传上来,但是这里非要先装什么破Adobe插件才行,诡异,想到斯诺登,还是quNMD吧。
这里编辑功能不错,但是怎么就没有预览功能呢? |