写了一段bat脚本,替换指定文件的特定字符串:
下面是内容: 可以放到其他BAT里面,给定变量值,goto到对应replace块。
@echo off
setlocal enabledelayedexpansion
REM orginalFile原始要操作的文件,单个文件。注:替换的文件中不能有冒号,否则结果不对。或者修改本脚本中for循环的delims=:中冒号为其他在文件中没有出现的符号,其中不能是等于号,<>需要加转义字符^,即写成delims=^<。
set orginalFile=1.jmx
REM outputFile指定替换字符串后,输出的文件
set outputFile=1_new.jmx
REM 要替换的原始字符串
set oldStr=HTTPSampler.port
REM 替换后的字符串
set newStr=HTTPSampler.port_new
REM 指定替换找到的第几个字符串,0是指全部替换
set /a number=0
goto replace
:replace
set /a i=0
for /f "tokens=* delims=:" %%i in (%orginalFile%) do (
set "a=%%i"
if %number% == 0 (
set "b=!a:%oldStr%=%newStr%!"
) else (
set "b=!a!"
if not "!a!" == "!a:%oldStr%=%newStr%!" (
set /a i+=1
if %number% == !i! (
set "b=!a:%oldStr%=%newStr%!"
)
)
)
REM 如果某行内容为空格或多个空格,输出的到文件中的那行内容是echo is on 或者echo is off
echo !b!>>%outputFile%
)
也可以把下面内容复制到txt中,另存为replace.bat,双击运行输入对应参数:
@echo off
setlocal enabledelayedexpansion
REM orginalFile原始要操作的文件,单个文件。注:替换的文件中不能有冒号,否则结果不对。或者修改本脚本中for循环的delims=:中冒号为其他在文件中没有出现的符号,其中不能是等于号,<>需要加转义字符^,即写成delims=^<。
set /p orginalFile=输入要修改的文件名(包含扩展名):
REM outputFile指定替换字符串后,输出的文件
set /p outputFile=输入输出文件名:
REM 要替换的原始字符串
set /p oldStr=输入要被替换的字符串:
REM 替换后的字符串
set /p newStr=输入替换的字符串:
REM 指定替换找到的第几个字符串,0是指全部替换
set /p number=输入替换找到的第几个字符串(0指全部替换):
set /a i=0
for /f "tokens=* delims=:" %%i in (%orginalFile%) do (
set "a=%%i"
if %number% == 0 (
set "b=!a:%oldStr%=%newStr%!"
) else (
set "b=!a!"
if not "!a!" == "!a:%oldStr%=%newStr%!" (
set /a i+=1
if %number% == !i! (
set "b=!a:%oldStr%=%newStr%!"
)
)
)
REM 如果某行内容为空格或多个空格,输出的到文件中的那行内容是echo is on 或者echo is off
echo !b!>>%outputFile%
)
#######################################################################
2022-05-25 更新:
保留某行为空白行,或某行内容只有空格。bat脚本如下:
@echo off
setlocal enabledelayedexpansion
REM orginalFile原始要操作的文件,单个文件。注:替换的文件中不能有冒号,否则结果不对。或者修改本脚本中for循环的delims=:中冒号为其他在文件中没有出现的符号,其中不能是等于号,<>需要加转义字符^,即写成delims=^<。
set orginalFile=test.txt
REM outputFile指定替换字符串后,输出的文件
set outputFile=test_new.txt
REM 要替换的原始字符串
set oldStr=Lee
REM 替换后的字符串
set newStr=Lee_New
REM 指定替换找到的第几个字符串,0是指全部替换
set /a number=0
goto replace
:replace
if exist %outputFile% del %outputFile%
set /a i=0
for /f "delims=" %%i in ('findstr /n .* %orginalFile%') do (
set "a=%%i"
set "a=!a:*:=!"
if "!a!"=="" (
set "b=!a!"
) else (
if %number% == 0 (
set "b=!a:%oldStr%=%newStr%!"
) else (
set "b=!a!"
if not "!a!" == "!a:%oldStr%=%newStr%!" (
set /a i+=1
if %number% == !i! (
set "b=!a:%oldStr%=%newStr%!"
)
)
)
)
REM 保留空白行,某行内容是空格或多个空格
echo.!b!>>%outputFile%
)
测试文件内容:
good morning
this is lee
nice to meet you
Best Regards
Lee
替换lee成Lee_New,效果如下:
good morning
this is Lee_New
nice to meet you
Best Regards
Lee_New
版权声明:本文为lxzi101410原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。