标题: [文本处理] 批处理如何替换当前行的下一行数据内容? [打印本页]
作者: FIR1987 时间: 2011-5-3 10:17 标题: 批处理如何替换当前行的下一行数据内容?
我有一行数据abcdefg 我想把当前行的g替换成x1
若abcdefg 下一行有字母h 则将h替换成x2,请问怎么实现
关键是这个下一行怎么实现呢
替换当前行代码如下- setlocal ENABLEDELAYEDEXPANSION
-
- for /f "delims=" %%i in ( c:\bat3.txt ) do (
-
- set var=%%i
-
- set "var=!var:h=x1!"
-
- echo !var! >> c:\newbat.txt
-
- )
复制代码
作者: caruko 时间: 2011-5-3 11:06
本帖最后由 caruko 于 2011-5-3 11:10 编辑
- setlocal ENABLEDELAYEDEXPANSION
- set flag=0
-
- for /f "delims=" %%i in ( c:\bat3.txt ) do (
-
- set var=%%i
-
-
- if !flag! equ 1 (
- set "var2=!var:h=x2!"
- set "var=!var2!"
- ) else (
- set "var2=!var:g=x1!"
- )
-
-
- if "!var!"=="!var2!" (
- set falg=0
- ) else (
- set falg=1
- )
- echo !var2! >> c:\newbat.txt
-
- )
复制代码
作者: hanyeguxing 时间: 2011-5-3 12:28
本帖最后由 hanyeguxing 于 2011-5-3 12:34 编辑
- @echo off&setlocal ENABLEDELAYEDEXPANSION
- (for /f "delims=" %%a in (c:\bat3.txt) do (
- set "a=%%a"
- if defined b set "a=!a:h=x2!"&set b=
- if /i "!a!"=="abcdefg" set "a=!a:g=x1!"&set b==
- echo;!a!
- ))>c:\newbat.txt
复制代码
作者: FIR1987 时间: 2011-5-6 09:48
@echo off&setlocal ENABLEDELAYEDEXPANSION
(for /f "delims=" %%a in (c:\bat3.txt) do (
set "a=%%a"
if defined b set "a=!a:h=x2!"&set b=
if /i "!a!"=="abcdefg" set "a=!a:g=x1!"&set b==
...
hanyeguxing 发表于 2011-5-3 12:28
版主你的这个不全吧 b=??
作者: FIR1987 时间: 2011-5-6 09:51
setlocal ENABLEDELAYEDEXPANSION
set flag=0
for /f "delims=" %%i in ( c:\bat3.txt ) do (
set var=%%i
if !flag! equ 1 (
set "var2=!var:h=x2!"
set "var=!var2!"
) else (
...
caruko 发表于 2011-5-3 11:06
谢谢,不过这个是适用于两行的吧- line1 abcdefg
- 2 hijk
- line1 abcdefg
- 2 hijk
复制代码
如果我是- line1 abcdefg
- 2 hijk
- 3 lmn
- 4 .....
- line 5 abcdefg
- 6 hijk
复制代码
那就要设置多个var了吧 有简便点方法吗
作者: hanyeguxing 时间: 2011-5-6 09:56
4# FIR1987
1,实际测试代码有什么问题吗?
2,再多花一分钟仔细想想代码为什么要这么写。
作者: FIR1987 时间: 2011-5-6 13:36
b= 是清空的标志
if defined b set "a=!a:h=x2!"&set b= 此话意思是如果b被定义 则将a变量中的h替换成x2
但是最后 b== 和echo后加分号 是什么意思 这块真没懂 多谢
set b==
echo;!a!
))>c:\newbat.txt rem输入到文件
作者: hanyeguxing 时间: 2011-5-6 17:54
本帖最后由 hanyeguxing 于 2011-5-6 18:23 编辑
当某一行是“abcdefg”时,执行if /i "!a!"=="abcdefg" set "a=!a:g=x1!"&set b==
这里此时定义了变量b,不用管b的值是什么
到下一行时,if defined b set "a=!a:h=x2!"&set b=
因为此时已定义了变量b,所以执行set "a=!a:h=x2!"&set b=
此时执行set b=删除b变量使得下一行时if defined b ... 不执行,一直等到再次出现 abcdefg
echo;!a!如果用空格,则当a为on、off或空、空格等时,输出错误
作者: wolonga123 时间: 2011-5-6 18:48
本帖最后由 wolonga123 于 2011-5-6 18:50 编辑
- setlocal ENABLEDELAYEDEXPANSION
- for /f "delims=" %%i in (c:\bat3.txt) do (
- set n+=1
- set var%n%=%%i
- )
- if "!var%n%!"=="abcdefg"(
- set var%n%=!var%n%:g=x1!
- set var%n+1%=!var%n+1%:h=x2!
- )
- pause
复制代码
不知道对不对...望高人指点
作者: hanyeguxing 时间: 2011-5-6 19:10
本帖最后由 hanyeguxing 于 2011-5-6 22:51 编辑
9# wolonga123
1,if "!var%n%!"=="abcdefg"( 引号括号之间要有空格
2,set var%n+1%=!var%n+1%:h=x2! 此时不存在var%n+1%
3,set var%n%=%%i 定义的变量太多
4,括号的逻辑顺序不对
还有其他一大堆语法错误。。。
作者: wolonga123 时间: 2011-5-6 20:57
10# hanyeguxing
确实,以后一定注意...........
就像你说的,var%n+1%不存在,那如果我想用var%n+1%这种形式的话,有没有可以改的办法呢?
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |