bat文件修改或替换文件内容

rem 定义变量延迟环境,关闭回显 @echo off&setlocal enabledelayedexpansion rem 读取a.txt所有内容 for /f "eol=* tokens=*" %%i in (a.txt) do ( rem 设置变量a为每行内容 set a=%%i rem 如果该行有123,则将其改为456 set "a=!a:123=456!" rem 把修改后的全部行存入fNew文件echo !a!>>fNew) rem 用fNew的内容替换原来a.txt内容 move fNew a.txt

出处:https://blog.csdn.net/everdayPHP/article/details/78919020

===============================================================

查找固定的内容并替换的为固定文本的情况:

文件A.txt是需要替换的文件,运行下面这个批处理:

@echo off&setlocal EnableDelayedExpansion

for /f "delims=" %%b in ('type A.txt') do (

set "str=%%b"&set "str=!baistr:ABC=123!"&set "str=!str:XYZ=AFK!"

echo !str! >>new_A.txt

)

start new_A.txt

下面这个是不去空行的,有必要你就用吧,有点长!你复制过去删除多余空格,不行留邮箱发给你。百度老是存在这个问题,贴出来再复制回去格式就不一样了。真气人!!!

@echo off&setlocal EnableDelayedExpansion

for /f "delims=" %%a in ('findstr /n .* A.txt') do (

set "str=%%a"

set "str=!str:ABC=123!"

set "str=!str:XYZ=AFK!"

echo !str:~1! >>tmp.txt

)

for /f "delims=" %%b in ('type tmp.txt') do (

set "str=%%b"

if "!str!"==": " (

call echo. >>new_A.txt

) else (

echo !str:~1! >>new_A.txt

))

del tmp.txt&start new_A.txt

出处:https://zhidao.baidu.com/question/84256975.html

=============================================================

根据上面的参考,自己稍微修改点,可以适用于自己的需求的程序

自己联系和测试程序

@echo off

setlocal EnableDelayedExpansion

rem 使用|分割符,并去除每一列的空格

for /f "eol=# tokens=1,2,3 delims=|" %%i in (a.txt) do (

set a=%%i&set b=%%j&set c=%%k&set d=%%l

set a=!a: =!&set b=!b: =!&set c=!c: =!&set d=!d: =!

echo a=!a: =! b=!b: =! c=!c: =!&set d=!d: =!

)

::goto :aa

goto :bb2

goto :cc

rem 读取a.txt所有内容

for /f "eol=* tokens=*" %%i in ('type a.txt') do (

rem 设置变量a为每行内容

set a=%%i

rem 如果该行有123,则将其改为456

echo !a!--

set "a=!a:dd*=456!"

rem 把修改后的全部行存入$

echo !a!>>$)

rem 用$的内容替换原来a.txt内容

move $ a.txt

goto :eof

rem 文件中所有行中包含bb的全部替换成66

:aa

for %%i in (a.txt) do set file=%%~fi

echo ==========

for /f "delims=" %%i in ('type a.txt') do (

set str=%%i

set "str=!str:bb=66!"

echo !str!>>$

)

move $ a.txt

goto :eof

:bb1

set old=

for /f "delims=" %%a in ('findstr .* a.txt') do (

set "str=%%a"

set "str=!str:ABC=123!"

set "str=!str:XYZ=AFK!"

echo !str!

)

goto :eof

:bb2

echo ==bb2==

set old=

set isMv=0

rem a.txt文件内容类似(可能包含空格):125|| aaaa||bbbb||

rem 查找并匹配最后一行,包含123开头行的字符串,忽略#开头的行

rem 建议用三位数表示,如果查询1开头的,则会把11-19和100-199的全匹配上了

for /f "eol=# delims=" %%a in ('findstr /b /c:"123" a.txt') do (set "old=%%a")

echo "%old%==============="

rem 再次查找所有完全匹配的行,并替换指定的字符串

IF EXIST $ del $

for /f "delims=" %%b in ('type a.txt') do (

set "str=%%b"

if "!str!"=="%old%" (set "str=#%old%"&set isMv=1)

echo !str!>>$

)

if [%isMv%]==[1] (move $ a.txt) else (del $)

goto :eof

:cc

set aa=kjk dfdasf jlksj ij hgn my name AA

set bb=my1

echo.%aa% | findstr /C:"%bb%"

goto :eof

View Code