返回列表 发帖
文件夹a 文件夹B 文件夹C 这三个文件夹是在 D:\1\ 下面,还是在 D:\ 下面?

TOP

本帖最后由 tmplinshi 于 2011-6-18 20:00 编辑
@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 ..tmpCOPY

TOP

6# hua841123
@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 >nulCOPY

TOP

本帖最后由 tmplinshi 于 2011-6-19 14:24 编辑

建议用 bwfr,替换速度非常快。
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txtCOPY
list.txt 的文件写法:
禁止2->允许1
禁止5->允许5
哈※->呵

----------------------------------------------------------------------
也可以使用其他的分隔符,例如:
bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt -dlm:"|"COPY
list.txt 的文件写法:
禁止2|允许1
禁止5|允许5
哈※|呵

TOP

返回列表