Re kcdsw:
抱歉!你的问题我很快就注意到了,但是遗憾的是,当时和后来我做了许多的测试,结果证明使用for+echo的方法复制和编辑文本存在很多问题,尤其是对类似cover.ps这类含有相当多特殊字符的文件。
于是我准备改弦更张,使用其它的方法编辑文本。
第一个想到的方法是edlin,因为它是NT系列自带的命令行方式的文本编辑器,结果费了一番工夫之后,发现edlin不能处理超长的文件,文件只加载到530多行便结束了。
于是,所余的路径便只有第三方脚本工具了。考虑到只是替换一些简单的文本,所以选择了sed,其脚本编写起来并不繁琐。使用GNU sed 3.02测试了以下代码,结果是正确且高效的。
@echo off
::取原始的位置参数
::for /f "tokens=1,2,3,4,5,6,7" %%a in ('findstr /C:"DeviceRGB" cover.ps') do set jpg=%%a %%b %%c %%d %%e %%f %%g
::取图片的象素值进行判断
for /f "tokens=2,3" %%h in ('findstr /C:"setcolorspace" cover.ps') do (
if %%h EQU %%i echo 封面中的作者照片无须更改!
if %%h LSS %%i echo 照片不规则!
if %%h GTR %%i set /a newsize=730*%%h/%%i
)
::::获取所在行行号和内容
::for /f "tokens=1,* delims=:" %%m in ('findstr /N /C:"730 730" temp.ps') do (
:: set iLN=%%m
:: set sLine=%%n
::)
::
::set sLine=%sLine:730 730=!newsize! 730%
::
::echo %iLn%d> _temp.edl
::echo i%iLn%>> _temp.edl
::echo %sLine%>> _temp.edl
::echo >> _temp.edl
::echo %iLn%,%iLn%l>> _temp.edl
::echo e>> _temp.edl
::
::edlin cover.ps < _temp.edl
:: 将新的大小写入指定行
if %newsize% NEQ 0 sed -e "s/\(.*\)730\( 730.*\)/\1%newsize%\2/" cover.ps >cover3.txt
Last edited by willsort on 2006-6-20 at 10:31 ]