用批处理实现文本文件中指定字符串的替换 zz
2005-06-17 09:17
344 查看
| |||
uglyfrog |
| ||
发帖: 249 积分: 0 注册: 2001-12-30 | 其实批处理也可以干很多事的,下面的批处理文件实现了对指定目录下的特定文件类型中的字符串进行替换的功能。虽然在unix或linux系统写一条语句就能实现,但在windows下用批处理也总比编一段程序方便些吧。
本例子实现了把c:/test目录(包括子目录)中所有txt文件中的aaa替换成bbb。 | ||
zzzevazzz |
| ||
发帖: 275 积分: 0 注册: 2002-05-13 | 完全不行,。楼主你测试过没有啊? 首先,对带空格的文件无法正确运行。 而且,“echo !TMP:%SCONTENT%=%DCONTENT%! >> %TMPFILE%”是什么意思? 被替换的文件都成这样了: !TMP:aaa=bbb! !TMP:aaa=bbb! !TMP:aaa=bbb! --- Ph4nt0m Security Team http://ph4nt0m.org/ | ||
href="https://www.xfocus.net/bbs/index.php?act=Profile&do=03&MID=11445" target=_blank>uglyfrog |
| ||
发帖: 249 积分: 0 注册: 2001-12-30 | 不好意思,我所给出的bat只是简单演示了它具有这种功能。并没有经过太严格的测试。如果有谁有兴趣的话,可以继续完善或发掘新的功能。 至于zzzevazzz所说的替换的内容不对,我用的系统是2000的,不知道你的是什么。如果你的系统也是2000的话,可以参见cmd和set命令的帮助部分,查看有关了延迟环境变量的内容。别忘了在执行bat文件的同时加上cmd的/v:on参数。别的系统我没试过。我想2000以后的系统应该都有这个特性。 还有就是如果我连自己都试过完全不行的话我也不会发上来了,不过还是要谢谢你,因为你帮我指出了其中的问题。同时向你学习,因为你对待事物的严谨态度。 | ||
zzzevazzz |
| ||
发帖: 275 积分: 0 注册: 2002-05-13 | 我没注意到“cmd /v:on /c”,抱歉。 但是还有问题,被替换的文本在行尾多了许多的空格,原因是 echo !TMP:%SCONTENT%=%DCONTENT%! >> %TMPFILE% 这条语句的">>"前多了不必要的空格。 文件名带空格的问题容易解决,下面是我修改过的: @echo off setlocal rem DPATH : 指定目录 rem FILETYPE: 指定文件类型 rem SCONTENT: 替换前的字符串 rem DCONTENT: 替换后的字符串 rem TMPFILE : 临时文件 set DPATH=C:/test set FILETYPE=*.txt set SCONTENT=aaa set DCONTENT=bbb set TMPFILE=%random%.tmp for /r %DPATH% %%i in (%FILETYPE%) do ( if exist %TMPFILE% (del /f/q %TMPFILE%) for /f "usebackq tokens=*" %%j in ("%%i") do ( set TMP=%%j echo !TMP:%SCONTENT%=%DCONTENT%!>>%TMPFILE% ) move /y %TMPFILE% "%%i" ) endlocal --- Ph4nt0m Security Team http://ph4nt0m.org/ | ||
href="https://www.xfocus.net/bbs/index.php?act=Profile&do=03&MID=11445" target=_blank>uglyfrog |
| ||
发帖: 249 积分: 0 注册: 2001-12-30 | 晚上抽空又看了一下。那句echo在批处理中总是解析成 echo !TMP:aaa=bbb! 1>>25417.tmp,所以会在行尾多一个空格。 所以可以用如下的方法解决: echo !TMP:%SCONTENT%=%DCONTENT%!>nul 1>>%TMPFILE% 还有那个文件名中有空格的问题,你的处理方法不错,充分利用了usebackq的特性。也可以变通的用: for /f "tokens=*" %%j in ('type "%%i"') 来搞定。 | ||
allyesno |
| ||
发帖: 1128 积分: 0 注册: 2003-06-06 | bat的功能还是太弱了 如果只是字母和数字 这个程序还可以执行 如果文本包含^&":;<> 这些字符 处理起来很麻烦 没有专门对字符 和字符串 操作的函数 也不具备多线程的性能 也不能读写内存 呵呵 allyesno 编辑于 2005-06-17 09:24 --- ▄︻┻┳═一★ QQ溢出了~~~~ |
相关文章推荐
- js替换字符串中所有指定的字符(实现代码)
- 批处理文件操作:替换文本文件某系字符写入新文件、遍历目录并进行字符串替换、拷贝文件到新目录、去掉文件扩展名
- 实现 用批处理获取cpu核心数 替换制定字符串
- awk实现替换字符串中指定位置之间的内容
- 在文件中替换字符串为指定字符串的实现函数
- apache poi 实现将PPT(2007)中指定单元格替换成指定字符串或图片
- C语言实现:替换字符串中指定字符
- js替换字符串中所有指定的字符(实现代码)
- mysql 替换函数replace()实现mysql替换指定字段中的字符串
- ubuntu find+sed 实现对目录中文件指定字符串替换
- 批处理查找和替换文件指定字符串
- oracle中实现截取字符串(substr)、查找字符串位置(instr)、替换字符串(replace)
- shell下文本文件内指定位置字符串运算
- 【剑指offer】实现一个函数来替换字符串中的空格
- php 正则替换 字符串中指定的字符串
- 删除当前文件夹下指定类型的文件 使用批处理实现
- 如何实现字符串的反转及替换?
- 替换字符串中连续出现的指定字符串
- Java遍历文件夹下所有文件并替换指定字符串
- js实现字符串转为指定格式的整型或浮点型