欢迎光临护送网
详情描述

方法1:使用 set 命令(适合小文件)

@echo off
setlocal enabledelayedexpansion

set "input=test.txt"
set "output=new_test.txt"
set "oldstr=旧文本"
set "newstr=新文本"

if not exist "%input%" (
    echo 文件不存在: %input%
    exit /b
)

(for /f "usebackq delims=" %%a in ("%input%") do (
    set "line=%%a"
    set "line=!line:%oldstr%=%newstr%!"
    echo !line!
)) > "%output%"

echo 替换完成

方法2:使用 findstr 命令(简单替换)

@echo off
set "input=test.txt"
set "output=new_test.txt"
set "oldstr=要替换的文本"
set "newstr=替换后的文本"

type "%input%" | findstr /v /n "^$" > "%input%.tmp"

(for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%input%.tmp"') do (
    set "line=%%b"
    call :replace
)) > "%output%"

del "%input%.tmp"
echo 替换完成
goto :eof

:replace
setlocal enabledelayedexpansion
set "line=!line:%oldstr%=%newstr%!"
echo !line!
endlocal
goto :eof

方法3:使用 sed 命令(需要安装)

如果有 sed 工具(可从 Git for Windows 等获取):

@echo off
set "input=test.txt"
set "output=new_test.txt"
set "oldstr=旧文本"
set "newstr=新文本"

REM sed -i 表示直接修改原文件
sed "s/%oldstr%/%newstr%/g" "%input%" > "%output%"

方法4:使用 PowerShell(推荐,功能强大)

@echo off
set "input=test.txt"
set "output=new_test.txt"
set "oldstr=旧文本"
set "newstr=新文本"

REM 使用 PowerShell 进行替换
powershell -Command "(Get-Content '%input%') -replace '%oldstr%', '%newstr%' | Set-Content '%output%'"

方法5:使用 JScript(内置于 Windows)

创建 replace.vbs 脚本:

Set args = WScript.Arguments
If args.Count < 4 Then
    WScript.Echo "用法: cscript replace.vbs 输入文件 输出文件 旧字符串 新字符串"
    WScript.Quit
End If

inputFile = args(0)
outputFile = args(1)
oldStr = args(2)
newStr = args(3)

Set fso = CreateObject("Scripting.FileSystemObject")
Set input = fso.OpenTextFile(inputFile, 1)
Set output = fso.OpenTextFile(outputFile, 2, True)

Do While Not input.AtEndOfStream
    line = input.ReadLine
    line = Replace(line, oldStr, newStr)
    output.WriteLine line
Loop

input.Close
output.Close

然后在批处理中调用:

@echo off
cscript //nologo replace.vbs "test.txt" "new_test.txt" "旧文本" "新文本"

方法6:带特殊字符处理的版本

@echo off
setlocal enabledelayedexpansion

set "input=input.txt"
set "output=output.txt"
set "oldstr=要&替换的<特殊>文本"
set "newstr=新&文本"

REM 处理特殊字符
set "oldstr_esc=!oldstr:&=^&!"
set "oldstr_esc=!oldstr_esc:<=^<!"
set "oldstr_esc=!oldstr_esc:>=^>!"
set "oldstr_esc=!oldstr_esc:|=^|!"

set "newstr_esc=!newstr:&=^&!"
set "newstr_esc=!newstr_esc:<=^<!"
set "newstr_esc=!newstr_esc:>=^>!"
set "newstr_esc=!newstr_esc:|=^|!"

(for /f "usebackq delims=" %%a in ("%input%") do (
    set "line=%%a"
    call set "line=%%line:!oldstr_esc!=!newstr_esc!%%"
    echo(!line!
)) > "%output%"

echo 替换完成

推荐方案

  • 简单替换:使用方法1或方法4(PowerShell)
  • 复杂替换:使用方法4(PowerShell)或方法5(JScript)
  • 处理特殊字符:使用方法6
  • 需要跨平台:考虑使用其他脚本语言(如Python)

PowerShell 方法通常是最佳选择,因为它:

内置于现代 Windows 系统 支持正则表达式 处理大文件性能好 能正确处理各种特殊字符
相关帖子
小区快递柜旁设了纸箱回收篮,投进去之前这几步处理做了会更受欢迎?
小区快递柜旁设了纸箱回收篮,投进去之前这几步处理做了会更受欢迎?
如何区分“敬业”与“隐形加班”?2026年法律认定标准有何新趋势?
如何区分“敬业”与“隐形加班”?2026年法律认定标准有何新趋势?
2026年,人工智能技术如何进一步推动信息无障碍,让沟通更无边界?
2026年,人工智能技术如何进一步推动信息无障碍,让沟通更无边界?
淮南市购物网站设计开发@网站运营,提供一站式建站服务
淮南市购物网站设计开发@网站运营,提供一站式建站服务
信用报告中的“公共记录”部分通常包含哪些内容,多久会更新一次?
信用报告中的“公共记录”部分通常包含哪些内容,多久会更新一次?
对于残疾人士士自主创业,社会与政府提供了哪些帮扶渠道?
对于残疾人士士自主创业,社会与政府提供了哪些帮扶渠道?
如果对遗产管理人的行为不满意,继承人可以通过什么途径进行监督?
如果对遗产管理人的行为不满意,继承人可以通过什么途径进行监督?
阜新市120救护车出租服务-重症病人转院租救护车,车内设备齐全
阜新市120救护车出租服务-重症病人转院租救护车,车内设备齐全
除了传统行业,2026年有哪些新兴的数字经济领域更适合残疾人发挥独特优势?
除了传统行业,2026年有哪些新兴的数字经济领域更适合残疾人发挥独特优势?
有哪些容易被忽视的生活习惯,实际上正在悄悄消耗储蓄?
有哪些容易被忽视的生活习惯,实际上正在悄悄消耗储蓄?
西安市长途救护车出租设备齐全-24小时救护车接送
西安市长途救护车出租设备齐全-24小时救护车接送
选择不同功率的取暖设备,最终获得的政府补贴金额会有差异吗?
选择不同功率的取暖设备,最终获得的政府补贴金额会有差异吗?
畅想十年后,脑机接口会不会成为一种新型的社交工具,并改变人际交流的形态?
畅想十年后,脑机接口会不会成为一种新型的社交工具,并改变人际交流的形态?
短租房源的布草洗涤与深度清洁,有哪些可验证的卫生流程与标准?
短租房源的布草洗涤与深度清洁,有哪些可验证的卫生流程与标准?
对于丁克家庭或者未育夫妻,一方为家庭付出较多能获得补偿吗?
对于丁克家庭或者未育夫妻,一方为家庭付出较多能获得补偿吗?
喀什智能响应式网站建设@专业网站建设服务,价格透明
喀什智能响应式网站建设@专业网站建设服务,价格透明
2026年保障性租赁住房的智能家居与数字化管理会普及哪些便利功能?
2026年保障性租赁住房的智能家居与数字化管理会普及哪些便利功能?
南宁市AI数字人视频制作#网站开发设计服务,企业解决方案
南宁市AI数字人视频制作#网站开发设计服务,企业解决方案
瓦房店市120救护车长途转运-救护车出租公司哪家好
瓦房店市120救护车长途转运-救护车出租公司哪家好
六安市高效获客助手@企业网站定制开发,一站式建站服务
六安市高效获客助手@企业网站定制开发,一站式建站服务