bat批处理文件查找和内容替换

chenxiaohua 2008-08-19 10:38:54
我的开发环境下面有很多名字为Root的文本文件,想写一个bat脚本,替换所有Root文件中的指定字符串。
本来有很多文本处理工具可以做,但是我想用一个bat脚本来实现。
请大家多多指教。
...全文
8541 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingjiang2003 2012-08-09
  • 打赏
  • 举报
回复
有个BUG呀,2012-02-24 20:32:18.171 pwd = 111111保存后,替换111111为PWD时,结果20:后面的全部截断了

这不能算是bug。由于你的文件中有:,而冒号是 findstr 用的分割符号,所以会有问题。

改成下面的样子就可以了。

@echo off
::把需要搜索的路径赋值给变量sp,这里举例是c:\tmp
set sp=d:\tmp
::把需要查找的文件名赋值给变量cf,这里举例是root.txt
set cf=root.txt
::把将被替换的字符串赋值给st,这里举例是apple
set st=111111
::把替换字符串赋值给dt,这里举例是lemon
set dt=PWD

::以上的这些赋值执行后,将会把C盘tmp文件夹下面包括子文件夹里的root.txt中的apple全部替换成lemon

::下面的代码将完成替换工作

for /r %sp% %%a in (%cf%) do (call :doit "%%~dpa")
goto end

:doit
setlocal enabledelayedexpansion
pushd %1
for /f "tokens=1-4* delims=:" %%i in ('findstr /n ".*" %cf%') do (
set txt=%%j:%%k:%%l
if "!txt!" == "" (
echo.>>%1root.tmp
) else (
echo !txt:%st%=%dt%!>>%1root.tmp
)
)
move /y root.tmp root.txt

:end
lyg22lyg 2012-02-25
  • 打赏
  • 举报
回复
有个BUG呀,2012-02-24 20:32:18.171 pwd = 111111保存后,替换111111为PWD时,结果20:后面的全部截断了
debug2000 2009-08-10
  • 打赏
  • 举报
回复
我怎么运行的不出来
乐桐 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Forever_Young 的回复:]
写一个


BatchFile code
@echo off
::把需要搜索的路径赋值给变量sp,这里举例是c:\tmp
set sp=c:\tmp
::把需要查找的文件名赋值给变量cf,这里举例是root.txt
set cf=root.txt
::把将被替换的字符串赋值给st,这里举例是apple
set st=apple
::把替换字符串赋值给dt,这里举例是lemon
set dt=lemon

::以上的这些赋值执行后,将会把C盘tmp文件夹下面包括子文件夹里的root.txt中的apple全部替换成lemon

::下面…
[/Quote]
好东西,收藏起来。
Forever_Young 2008-08-20
  • 打赏
  • 举报
回复
写一个

[code=BatchFile]
@echo off
::把需要搜索的路径赋值给变量sp,这里举例是c:\tmp
set sp=c:\tmp
::把需要查找的文件名赋值给变量cf,这里举例是root.txt
set cf=root.txt
::把将被替换的字符串赋值给st,这里举例是apple
set st=apple
::把替换字符串赋值给dt,这里举例是lemon
set dt=lemon

::以上的这些赋值执行后,将会把C盘tmp文件夹下面包括子文件夹里的root.txt中的apple全部替换成lemon

::下面的代码将完成替换工作

for /r %sp% %%a in (%cf%) do (call :doit "%%~dpa")
goto end

:doit
setlocal enabledelayedexpansion
pushd %1
for /f "tokens=1,2* delims=:" %%i in ('findstr /n ".*" %cf%') do (
set txt=%%j
if "!txt!" == "" (
echo.>>%1root.tmp
) else (
echo !txt:%st%=%dt%!>>%1root.tmp
)
)
move /y root.tmp root.txt

:end
[/code]
lw549 2008-08-20
  • 打赏
  • 举报
回复
把文件名中包含root的文本文件中所有的-替换成/
[code=BatchFile]


@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f %%i in ('dir /b /a:-d *root*.txt') do (
call :replace %%i >%%i.replace
del %%i
ren %%i.replace %%i
)
goto :eof

:replace

for /f "tokens=1,* delims=:" %%j in ('findstr /n ".*" %1') do (
if "%%k"=="" (
echo.
) else (
set tmpline=%%k
set tmpline=!tmpline:-=/!
echo !tmpline!
)
)

goto :eof


[/code]

6,865

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧