Windows批處理BAT中實(shí)現(xiàn)文本文件字符串替換
一、基礎(chǔ)版(無特殊字符場(chǎng)景)
適用于替換普通字符串(無空格、特殊符號(hào)),代碼簡(jiǎn)潔易理解。
@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艨招校?,findstr /n 給每行加行號(hào)(避免空行被忽略)
for /f "delims=:" %%i in ('findstr /n "^" "%原文件%"') do (
set "行號(hào)=%%i"
setlocal enabledelayedexpansion
:: 提取行內(nèi)容(去掉行號(hào)和冒號(hào))
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%原文件%" ^| findstr "^!行號(hào)!:"') do (
set "行=%%b"
)
:: 處理空行(行號(hào)對(duì)應(yīng)內(nèi)容為空)
if "!行號(hào)!"=="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ò)展后,!變量!會(huì)實(shí)時(shí)解析,確保每行替換生效。 - 處理空行
for /f會(huì)忽略空行,通過findstr /n "^"給每行加行號(hào)(包括空行),再提取行內(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)行腳本,完成替換(會(huì)自動(dòng)覆蓋原文件,建議先備份)。
五、示例
假設(shè) test.txt 內(nèi)容:
hello old_str old_str123 這是old_str的測(cè)試
運(yùn)行腳本(查找 old_str,替換為 new_str)后,內(nèi)容變?yōu)椋?/p>
hello new_str new_str123 這是new_str的測(cè)試
到此這篇關(guān)于Windows批處理BAT中實(shí)現(xiàn)文本文件字符串替換的文章就介紹到這了,更多相關(guān)Windows批處理文件字符串替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于批處理中FOR語句的使用說明與學(xué)習(xí)技巧
關(guān)于批處理中FOR語句的使用說明與學(xué)習(xí)技巧...2007-10-10
批處理bat為照片批量添加隨機(jī)圖片水印(隨機(jī)圖片隨機(jī)位置)
基于bat與ImageMagick實(shí)現(xiàn)的批量添加水印的工具,作者是bat之家的創(chuàng)始人比較厲害,喜歡學(xué)習(xí)bat的朋友看看2023-11-11
windows cmd 中判斷命令是否執(zhí)行成功的方法
在 Windows 的 CMD 命令提示符中,可以通過檢查 %ERRORLEVEL% 環(huán)境變量來判斷上一個(gè)命令是否執(zhí)行成功,大多數(shù)命令執(zhí)行成功后返回 0,失敗時(shí)返回非零值(具體值取決于命令類型)2025-05-05
開機(jī)啟動(dòng)項(xiàng)清理代碼bat版
這篇文章主要介紹了開機(jī)啟動(dòng)項(xiàng)清理代碼,主要是通過bat實(shí)現(xiàn),代碼寫的不錯(cuò),喜歡批處理的朋友可以看下2014-05-05
windows 批處理bat連接本地mysql 創(chuàng)建制定數(shù)據(jù) 并執(zhí)行sql文件
這篇文章主要介紹了windows 批處理bat連接本地mysql 創(chuàng)建制定數(shù)據(jù) 并執(zhí)行sql文件,需要的朋友可以參考下2021-03-03

