批处理怎样替换文件夹下所有文本内容?

求一个批量替换文件夹中文本中内容的文件。。。 
  举例说明哈。
比如: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
哈※|呵

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页