标题: [文本处理] 批处理怎样替换文件夹下所有文本内容? [打印本页]
作者: hua841123 时间: 2011-6-18 18:16 标题: 批处理怎样替换文件夹下所有文本内容?
本帖最后由 hua841123 于 2011-6-19 11:44 编辑
求一个批量替换文件夹中文本中内容的文件。。。
举例说明哈。
比如: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
哈※ 改成 呵
作者: CrLf 时间: 2011-6-18 18:17
本帖最后由 zm900612 于 2011-6-18 22:44 编辑
本主题经过修改,已符合版规。
作者: tmplinshi 时间: 2011-6-18 18:49
文件夹a 文件夹B 文件夹C 这三个文件夹是在 D:\1\ 下面,还是在 D:\ 下面?
作者: hua841123 时间: 2011-6-18 19:30
文件夹a 文件夹B 文件夹C 这三个文件夹是在 D:\1\ 下面,而且D:\1\ a 还有文件夹~
作者: tmplinshi 时间: 2011-6-18 19:41
本帖最后由 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 ..tmp
复制代码
作者: hua841123 时间: 2011-6-19 11:43
本帖最后由 hua841123 于 2011-6-19 11:49 编辑
那 如果 多个内容修改 。 这个代码 还适用吗??
比如 禁止2改成允许1
还有 禁止5 改成 允许5
哈※ 改成 呵
大概20多个的样子~ 都要改。。 此文件夹下文本总数量 超过1000个~~
作者: tmplinshi 时间: 2011-6-19 13:29
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 >nul
复制代码
作者: tmplinshi 时间: 2011-6-19 14:10
本帖最后由 tmplinshi 于 2011-6-19 14:24 编辑
建议用 bwfr,替换速度非常快。- bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt
复制代码
list.txt 的文件写法:
----------------------------------------------------------------------
也可以使用其他的分隔符,例如:- bwfr.exe "D:\1\*.txt" -s -f -argfile:list.txt -dlm:"|"
复制代码
list.txt 的文件写法:
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |