求助批处理替换指定行字符串

1.txt文本如下
12 23 34 45 56 67 78
ab bc cd de ef fg gh
qq aa zz xx ss ww ee
dd cc vv ff rr tt gg
意图是选中第三行后修改ww使之成为ha
不过所有的东东都是变量,包括行值、列值、ww这个字符串本身
要求是所有的变量都可以自主决定选择,但是1.txt文本同一行可能包含相同的字符串,即第三行可能有两个以上ww,我的目的是可以自主选择某一列的ww进行修改

第1个回答  2011-08-30
试试是不是这个要求
@echo off&echo/
set ff=1.txt
set ln=3
set s1=ww
set s2=ha
(for /f "tokens=1* delims=:" %%i in ('type "%ff%"^|findstr/n ".*"')do (
if %%i equ %ln% (set h=%%j
call echo.%%h:%s1%=%s2%%%)else echo.%%j))>temp.yky
move temp.yky "%ff%"&echo 处理完成&ping -n 2 127.1>nul追问

那如果一行中不止存在一个ww,但是我的目的是自己选中某一列的ww修改,这个批处理怎么改呢?

追答

那就改写个指定行列换成指定字符:
@echo off&echo/
set ff=1.txt
set ln=3
set cl=6
set s=ha
setlocal enabledelayedexpansion
(for /f "tokens=1* delims=:" %%i in ('type "%ff%"^|findstr/n ".*"'
)do if %%i neq %ln% (echo.%%j)else (
for %%k in (%%j)do (set/a n+=1
if !n! equ %cl% (set h=!h! %s%)else set "h=!h! %%k")
echo.!h:~1!))>temp.yky
move temp.yky "%ff%"&echo 处理完成&ping -n 2 127.1>nul

追问

非常棒!剩下最后一个小问题:
假设第三行第六列没有任何字符串(即我要替换的位置ww是空的),您的批处理结果也是空的。如何修改使之能填充该位置(即用题目中变量s=ha填充)?

追答

改了一下,可到Hi 交流
@echo off&echo/
set ff=1.txt
set ln=3
set cl=6
set s=ha
setlocal enabledelayedexpansion
(for /f "tokens=1* delims=:" %%i in ('type "%ff%"^|findstr/n ".*"'
)do if %%i neq %ln% (echo.%%j)else (set mh="%%j"
set mh=!mh: =" "!
for %%k in (!mh!)do (set/a n+=1
if !n! equ %cl% (set h=!h! %s%)else set "h=!h! %%~k")
echo.!h:~1!))>temp.yky
move temp.yky "%ff%"&echo 处理完成&ping -n 2 127.1>nul

本回答被提问者采纳
第2个回答  2011-08-29
思路不是很清晰,写的比较繁琐,功能应该没问题吧
@echo off
setlocal enabledelayedexpansion
del 1.txt 2.txt 3.txt 4.txt 5.txt
copy 0.txt 1.txt /y
set fixline=3
set fixstr=6
set fixoverstr=hh
for /f "tokens=1,2,3,4,5,6,7 delims= " %%i in (1.txt) do (
set /a n+=1
if "!n!" lss "%fixline%" echo %%i %%j %%k %%l %%m %%n %%o>>5.txt
if "!n!" equ "%fixline%" (
echo %%i>>2.txt
echo %%j>>2.txt
echo %%k>>2.txt
echo %%l>>2.txt
echo %%m>>2.txt
echo %%n>>2.txt
echo %%o>>2.txt
set m=
for /f %%j in (2.txt) do (
set /a m+=1
if "!m!"=="%fixstr%" (set s=!s!%fixoverstr% ) else set s=!s!%%j
)
echo !s:~,-1!>4.txt
@echo off
)
if "!n!" gtr "%fixline%" echo %%i %%j %%k %%l %%m %%n %%o>>3.txt
)
type 5.txt,4.txt,3.txt>1.txt
del 2.txt 3.txt 4.txt 5.txt
echo 修改完毕!
相似回答