假设有一个包含如下内容的文本文件"1.txt"
Line131TextA
Line2561TextB
Line3212TextC
Test453TextD
Line50725.76TextE
Line6TextF
Test153TextD
Test85.3TextD
Line7TextG
需求是: 在同时包含"Test"和"TextD"的行中,将"Test"和"TextD"之间的字符替换成固定的"7.0",生成"2.txt"
代码如下:- @echo off
- (for /f "tokens=* delims=" %%a in (1.txt) do (
- set "var=%%a"
- setlocal enabledelayedexpansion
- echo "!var!"|findstr "Test.*TextD">nul&& set "var= Test7.0TextD"
- echo !var!
- endlocal
- )
- )>2.txt
- pause
复制代码 问题:
1、经实际测试,以上代码是可以实现基本功能的,可是为了使2.txt格式统一,set "var= Test7.0TextD"中的空格数目是手动设定的,能否自动判断原文件中对应行前面的空格或者间隔符的个数,生成到2.txt中?
2、为什么"setlocal enabledelayedexpansion"必须在For语句内部执行?经反复验证,如果放在For语句外面的话,当1.txt中一些特殊符号的时候会被遗漏,比如感叹号"!",也就是说,如果1.txt中有感叹号的话,2.txt中就不会有。
3、以上代码执行时效率很低,能否有更好的方法?
[ 本帖最后由 kent 于 2010-7-2 10:35 编辑 ] |