[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何替换当前行的下一行数据内容?

我有一行数据abcdefg 我想把当前行的g替换成x1
若abcdefg 下一行有字母h 则将h替换成x2,请问怎么实现

关键是这个下一行怎么实现呢

替换当前行代码如下
  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /f  "delims=" %%i in ( c:\bat3.txt ) do (
  3. set var=%%i
  4. set "var=!var:h=x1!"
  5. echo !var! >> c:\newbat.txt
  6. )
复制代码
目前是一个批处理初学者,问的傻问题还请多多见谅

10# hanyeguxing
确实,以后一定注意...........
就像你说的,var%n+1%不存在,那如果我想用var%n+1%这种形式的话,有没有可以改的办法呢?

TOP

本帖最后由 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,括号的逻辑顺序不对
还有其他一大堆语法错误。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 wolonga123 于 2011-5-6 18:50 编辑
  1. setlocal ENABLEDELAYEDEXPANSION
  2. for /f "delims=" %%i in (c:\bat3.txt) do (
  3. set n+=1
  4. set var%n%=%%i
  5. )
  6. if "!var%n%!"=="abcdefg"(
  7. set var%n%=!var%n%:g=x1!
  8. set var%n+1%=!var%n+1%:h=x2!
  9. )
  10. pause
复制代码
不知道对不对...望高人指点

TOP

本帖最后由 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或空、空格等时,输出错误
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP


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输入到文件
目前是一个批处理初学者,问的傻问题还请多多见谅

TOP

4# FIR1987


1,实际测试代码有什么问题吗?
2,再多花一分钟仔细想想代码为什么要这么写。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

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



谢谢,不过这个是适用于两行的吧
  1. line1    abcdefg
  2. 2          hijk
  3. line1    abcdefg
  4. 2          hijk
复制代码
如果我是
  1. line1    abcdefg
  2. 2          hijk
  3. 3          lmn
  4. 4          .....
  5. line 5   abcdefg
  6. 6         hijk
复制代码
那就要设置多个var了吧 有简便点方法吗
目前是一个批处理初学者,问的傻问题还请多多见谅

TOP

@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=??
目前是一个批处理初学者,问的傻问题还请多多见谅

TOP

本帖最后由 hanyeguxing 于 2011-5-3 12:34 编辑
  1. @echo off&setlocal ENABLEDELAYEDEXPANSION
  2. (for /f "delims=" %%a in (c:\bat3.txt) do (
  3.     set "a=%%a"
  4.     if defined b set "a=!a:h=x2!"&set b=
  5.     if /i "!a!"=="abcdefg" set "a=!a:g=x1!"&set b==
  6.     echo;!a!
  7. ))>c:\newbat.txt
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 caruko 于 2011-5-3 11:10 编辑
  1. setlocal ENABLEDELAYEDEXPANSION
  2. set flag=0
  3. for /f  "delims=" %%i in ( c:\bat3.txt ) do (
  4. set var=%%i
  5. if !flag! equ 1 (
  6.         set "var2=!var:h=x2!"
  7.         set "var=!var2!"
  8. ) else (
  9.         set "var2=!var:g=x1!"
  10. )
  11. if  "!var!"=="!var2!" (
  12.           set falg=0
  13. ) else (
  14.            set falg=1
  15. )
  16. echo !var2! >> c:\newbat.txt
  17. )
复制代码

TOP

返回列表