Windows批處理BAT中實(shí)現(xiàn)文本文件字符串替換
一、基礎(chǔ)版(無特殊字符場景)
適用于替換普通字符串(無空格、特殊符號),代碼簡潔易理解。
@echo off
setlocal enabledelayedexpansion
:: ===================== 配置參數(shù) =====================
set "原文件=test.txt" :: 要替換的文本文件路徑
set "查找字符串=old_str" :: 要替換的舊字符串
set "替換字符串=new_str" :: 替換后的新字符串
:: ====================================================
:: 檢查原文件是否存在
if not exist "%原文件%" (
echo 錯(cuò)誤:文件 "%原文件%" 不存在!
pause
exit /b 1
)
:: 臨時(shí)文件(避免覆蓋原文件)
set "臨時(shí)文件=%原文件%.tmp"
:: 逐行讀取并替換
del /f /q "%臨時(shí)文件%" 2>nul :: 刪除舊的臨時(shí)文件
for /f "delims=" %%a in ('type "%原文件%" 2^>nul') do (
set "行=%%a"
:: 替換字符串(!行! 啟用延遲擴(kuò)展,處理變量實(shí)時(shí)更新)
set "行=!行:%查找字符串%=%替換字符串%!"
:: 寫入臨時(shí)文件(echo. 處理空行)
if "!行!"=="" (echo.) else (echo !行!) >> "%臨時(shí)文件%"
)
:: 替換原文件
move /y "%臨時(shí)文件%" "%原文件%" >nul
echo 替換完成!
endlocal
pause
二、增強(qiáng)版(支持特殊字符 / 空格 / 空行)
解決基礎(chǔ)版無法處理 &、|、<、>、!、% 等特殊字符,以及空行丟失的問題:
@echo off
setlocal disabledelayedexpansion :: 先禁用延遲擴(kuò)展,避免!被吞
chcp 65001 >nul :: 可選:設(shè)置UTF-8編碼(處理中文)
:: ===================== 配置參數(shù) =====================
set "原文件=test.txt" :: 目標(biāo)文件
set "查找字符串=舊內(nèi)容&特殊字符" :: 支持含&、空格等
set "替換字符串=新內(nèi)容|替換" :: 支持含|、!等
:: ====================================================
if not exist "%原文件%" (
echo 錯(cuò)誤:文件 "%原文件%" 不存在!
pause
exit /b 1
)
set "臨時(shí)文件=%原文件%.tmp"
del /f /q "%臨時(shí)文件%" 2>nul
:: 用findstr逐行讀?。ūA艨招校琭indstr /n 給每行加行號(避免空行被忽略)
for /f "delims=:" %%i in ('findstr /n "^" "%原文件%"') do (
set "行號=%%i"
setlocal enabledelayedexpansion
:: 提取行內(nèi)容(去掉行號和冒號)
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%原文件%" ^| findstr "^!行號!:"') do (
set "行=%%b"
)
:: 處理空行(行號對應(yīng)內(nèi)容為空)
if "!行號!"=="1" if not defined 行 set "行="
:: 替換字符串(啟用延遲擴(kuò)展處理!)
set "行=!行:%查找字符串%=%替換字符串%!"
:: 寫入臨時(shí)文件(空行直接echo.)
if defined 行 (echo(!行!) else (echo.) >> "!臨時(shí)文件!"
endlocal
)
:: 替換原文件(覆蓋)
move /y "%臨時(shí)文件%" "%原文件%" >nul
echo 替換完成(支持特殊字符)!
endlocal
pause
三、關(guān)鍵說明
- 延遲擴(kuò)展(enabledelayedexpansion)BAT 中變量默認(rèn)在命令塊(
())執(zhí)行前解析,啟用延遲擴(kuò)展后,!變量!會實(shí)時(shí)解析,確保每行替換生效。 - 處理空行
for /f會忽略空行,通過findstr /n "^"給每行加行號(包括空行),再提取行內(nèi)容,保留原文件空行結(jié)構(gòu)。 - 特殊字符轉(zhuǎn)義
若查找 / 替換字符串含&、|、<、>,需在 BAT 中用^轉(zhuǎn)義(如查找字符串=old^&str);
含!時(shí),需先禁用延遲擴(kuò)展讀取行,再啟用延遲擴(kuò)展替換。 - 編碼問題若文件是 UTF-8 編碼,需在腳本開頭加
chcp 65001 >nul,避免中文亂碼;ANSI 編碼無需此操作。
四、使用方法
- 修改腳本中
原文件、查找字符串、替換字符串三個(gè)參數(shù); - 將腳本保存為
.bat文件,放在目標(biāo)文本文件同目錄; - 雙擊運(yùn)行腳本,完成替換(會自動覆蓋原文件,建議先備份)。
五、示例
假設(shè) test.txt 內(nèi)容:
hello old_str old_str123 這是old_str的測試
運(yùn)行腳本(查找 old_str,替換為 new_str)后,內(nèi)容變?yōu)椋?/p>
hello new_str new_str123 這是new_str的測試
到此這篇關(guān)于Windows批處理BAT中實(shí)現(xiàn)文本文件字符串替換的文章就介紹到這了,更多相關(guān)Windows批處理文件字符串替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
BAT腳本之核心技巧:詳解IF語句的使用方法與實(shí)例
如果你想要在Bat編程語言中使用條件語句,那么這篇指南將會為你介紹如何使用IF語句,?IF語句是任何編程語言中都不可或缺的一部分?-?它使您能夠基于特定的條件執(zhí)行某些代碼塊或跳過它們,在這篇簡短的指南里,我們將向你展示如何在Bat中編寫IF語句并給出一些示例來說明其用法2024-02-02
關(guān)閉所有分區(qū)自動播放和恢復(fù)所有分區(qū)自動播放的cmd批處理
關(guān)閉所有分區(qū)自動播放和恢復(fù)所有分區(qū)自動播放.cmd批處理,需要的朋友可以參考下2012-07-07
Windows2003下批量添加和導(dǎo)出所有ip BAT腳本
這篇文章主要介紹了Windows2003下批量添加和導(dǎo)出所有ip BAT腳本,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-07-07
CMD命令行將當(dāng)前磁盤所有文件名寫入到文本文件的方法
有時(shí)候我們需要將當(dāng)前目錄下的文件名寫入到文本文件中,方便我們將內(nèi)容列表分享給用戶,那么就可以參考下面的代碼2014-05-05

