Board logo

标题: 请高手帮忙看看 [打印本页]

作者: gigigaga     时间: 2007-3-6 05:50    标题: 请高手帮忙看看

我是新手,从本网下拷也一段批处理代码,用作文本文件查找替换工具,但是出了一下问题, 就是如果被替换的文本文件中含有"!" (感叹号) 的话, 替换结束后,里面的感叹号就全都没有了, 但"!"必须得保留, 请问怎样改写如下代码:
@echo on
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (a.txt) do (
set var=%%i
set "var=!var:aaa=111!"
set  "var=!var:bbb=222!"
set "var=!var:ccc=333!"
echo !var!>>aaa.txt
)

a.txt 内容:
!aaa
!!!bbb!!!
!a!b!c
aaabbbccc1!!bbb

成功替换后的文本aaa.txt应当为:
!111
!!!222!!!
!a!b!c
1112223331!!222

但实际上为:
111  
ECHO 处于打开状态。
bc  
1112223331222

请高手帮忙解决, 查了两天了,也没有找到解决办法
作者: ccwan     时间: 2007-3-6 06:55
用call来实现变量延迟
@echo off
for /f "tokens=1,2 delims=:" %%i in ('findstr /n .* a.txt') do (
    if "%%i"=="3" (>>aaa.txt echo %%j
    ) else (
    call :begin %%j
    )
)
pause&exit

:begin
set "var=%1"
set "var=%var:a=1%"
set "var=%var:b=2%"
set "var=%var:c=3%"
>>aaa.txt echo %var%
goto :eof