最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Windows批處理BAT中實(shí)現(xiàn)文本文件字符串替換

 更新時(shí)間:2026年01月12日 09:55:14   作者:專注編程優(yōu)化20年  
在 Windows 批處理(BAT)中實(shí)現(xiàn)文本文件字符串替換,核心思路是通過?for /f?逐行讀取文件內(nèi)容,結(jié)合字符串替換語法處理每行內(nèi)容,最后將處理后的內(nèi)容寫入臨時(shí)文件,替換原文件,以下是完整的實(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)鍵說明

  1. 延遲擴(kuò)展(enabledelayedexpansion)BAT 中變量默認(rèn)在命令塊(())執(zhí)行前解析,啟用延遲擴(kuò)展后,!變量! 會(huì)實(shí)時(shí)解析,確保每行替換生效。
  2. 處理空行for /f 會(huì)忽略空行,通過 findstr /n "^" 給每行加行號(hào)(包括空行),再提取行內(nèi)容,保留原文件空行結(jié)構(gòu)。
  3. 特殊字符轉(zhuǎn)義
    若查找 / 替換字符串含 &、|、<、>,需在 BAT 中用 ^ 轉(zhuǎn)義(如 查找字符串=old^&str);
    含 ! 時(shí),需先禁用延遲擴(kuò)展讀取行,再啟用延遲擴(kuò)展替換。
  4. 編碼問題若文件是 UTF-8 編碼,需在腳本開頭加 chcp 65001 >nul,避免中文亂碼;ANSI 編碼無需此操作。

四、使用方法

  1. 修改腳本中 原文件、查找字符串、替換字符串 三個(gè)參數(shù);
  2. 將腳本保存為 .bat 文件,放在目標(biāo)文本文件同目錄;
  3. 雙擊運(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)文章

最新評(píng)論

鲁山县| 舞钢市| 五指山市| 峨眉山市| 池州市| 清水河县| 盱眙县| 内乡县| 青州市| 于都县| 左权县| 定兴县| 西安市| 普格县| 东港市| 建始县| 淮阳县| 清水县| 铜鼓县| 乌海市| 江安县| 顺昌县| 穆棱市| 色达县| 沾化县| 交口县| 怀宁县| 佛坪县| 丽江市| 新巴尔虎左旗| 宣恩县| 越西县| 延川县| 白水县| 南投市| 高雄县| 大埔区| 英德市| 莆田市| 明星| 靖安县|