1. 程式人生 > >批處理怎樣替換資料夾下所有文字內容?

批處理怎樣替換資料夾下所有文字內容?

求一個批量替換資料夾中文字中內容的檔案。。。 
  舉例說明哈。
比如:D盤 1資料夾下 有1.txt  2.txt 3.txt。。。 還有資料夾a 資料夾B 資料夾C  切資料夾裡還有txt及資料夾。。  
資料夾a 資料夾B 資料夾C 這三個資料夾是在 D:\1\ 下面,  下面還有子資料夾
  把所有txt檔案裡 禁止2 替換成 允許1 


  請教如何替換 整個D:\1 資料夾下 所有txt文本里內容啊???


多個內容修改 下面那個程式碼還適用嗎?
比如 禁止2改成允許1
  還有 禁止5 改成 允許5
   哈※  改成 呵


@echo off
setlocal disabledelayedexpansion


set "dir=D:\1"
set "old=禁止2"
set "new=允許1"


findstr /s /m /c:"%old%" "%dir%\*.txt" >..tmp


for /f "delims=" %%i in (..tmp) do (
    findstr /n .* "%%i" >..tmp
    (
        for /f "delims=" %%a in (..tmp) do (
            set str=%%a
            setlocal enabledelayedexpansion
            set "str=!str:%old%=%new%!"
            echo,!str:*:=!
            endlocal
        )
    ) >"%%i"
)


del ..tmp
複製程式碼


@echo off
setlocal disabledelayedexpansion
title 修改中...


rem 設定
set "dir=D:\1"
set replace_list="禁止2=允許1" "禁止5=允許5" "哈※=呵"


rem 輸出檔案列表
dir /s /b /a:-d-r "%dir%\*.txt" >..tmp || goto exit


rem 統計檔案個數
for /f %%i in (' "find /c /v "" <..tmp" ') do (
    set /a n_total = %%i, n_current = 0
)


rem 替換
set "s=                       "
for /f "delims=" %%i in (..tmp) do (
    set /a n_current += 1
    findstr /n .* "%%i" >..tmp
    (
        for /f "delims=" %%a in (..tmp) do (
            set str=%%a
            setlocal enabledelayedexpansion
            set /p =%s: =%!n_current! / %n_total% <nul >con
            set str=!str:*:=!
            for %%a in (%replace_list%) do (
                if defined str set str=!str:%%~a!
            )
            echo,!str!
            endlocal
        )
    ) >"%%i"
)


:exit
title 完成
del ..tmp 2>nul
echo,
echo 按任意鍵退出...
pause >nul


本帖最後由 tmplinshi 於 2011-6-19 14:24 編輯




建議用 bwfr,替換速度非常快。
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt
複製程式碼
list.txt 的檔案寫法:
禁止2->允許1
禁止5->允許5
哈※->呵


----------------------------------------------------------------------
也可以使用其他的分隔符,例如:
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt -dlm:"|"
複製程式碼
list.txt 的檔案寫法:
禁止2|允許1
禁止5|允許5
哈※|呵