Board logo

标题: [文件操作] 批处理如何修改文本文件某一行内容? [打印本页]

作者: regabc    时间: 2011-5-28 16:59     标题: 批处理如何修改文本文件某一行内容?

如何修改文本文件某一行内容?
遍历所有文件夹,修改某一行的内容。
文件名称,有中文、英文和数字等等。

比如:文本文件里的某一行内容为
<xml:内容>你好</xml:内容>,这句话就占有一行,想修改为:<xml:内容>朋友最近好不?</xml:内容>
作者: CrLf    时间: 2011-5-28 17:08

具体情况具体分析,批处理的编写是不能脱离实际背景的,请楼主在顶楼更新一下,标明具体要求、前后样本
作者: regabc    时间: 2011-5-28 17:36

2# zm900612


修改了下贴子,请查看下。
作者: CrLf    时间: 2011-5-28 17:54

楼主的说明不太给力啊,我只好按照我的理解来回复了...
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('findstr /l /n "<xml:内容>你好</xml:内容>" 1.txt') do (
  3.    set /a n+=1
  4.    if %%a neq !n! (
  5.       set n=%%a
  6.       echo ^<xml:内容^>朋友最近好不?^</xml:内容^>
  7.    ) else echo %%b
  8. )
  9. pause
复制代码

作者: batman    时间: 2011-5-28 17:54

头痛的特殊字符>,还是用vbs来处理吧。。。
作者: regabc    时间: 2011-5-28 18:35

4# zm900612


别忘了,是遍历文件夹,遍历所有TXT文件。不是一个文件。
作者: CrLf    时间: 2011-5-28 18:49

本帖最后由 zm900612 于 2011-5-28 18:51 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%a in (*.htm) do (
  3. (for /f "delims=" %%b in (%%~sa) do (
  4. set tmp=%%b
  5. set "tmp=!tmp:>你好</xml:=>朋友最近好不?</xml:!"
  6. echo !tmp!
  7. ))>tmp
  8. move tmp %%~sa
  9. )
  10. pause
复制代码

作者: batman    时间: 2011-5-28 21:01

本帖最后由 batman 于 2011-5-29 11:42 编辑

vbs正则:
  1. Dim path, fso
  2. path = "这里改为你的总目录绝对路径"
  3. Set fso = CreateObject("scripting.filesystemobject")
  4. search path
  5. Set fso = Nothing
  6. MsgBox "ok"
  7. Function search(path)
  8. For Each file In fso.GetFolder(path).Files
  9.    If fso.GetExtensionName(file) = "txt" Then RegExptest fso.OpenTextFile(file, 1).ReadAll(), file
  10. Next
  11. For Each folder In fso.GetFolder(path).SubFolders
  12.    search folder
  13. Next
  14. End Function
  15. Function RegExptest(rgstr, file)
  16.   Dim regex
  17.   Set RegEx = New RegExp
  18.   regex.Global = True
  19.   regex.Pattern = "(<[^<>]+>)[^<>]+(<[^<>]+>)"
  20.   vbstr = regex.Replace(vbstr, "$1要替换成的字符$2")
  21.   fso.OpenTextFile(file, 2, 1).Write rgstr
  22.   Set regex = Nothing
  23. End Function
复制代码

作者: 随风    时间: 2011-5-28 21:03

未测试,运行前先备份源文件。。。。。切记!!!
:
  1. @echo off
  2. for /f "delims=" %%i in ('dir/b/a-d/s *.txt') do (
  3.    cd.>temp
  4.    for /f "usebackq delims=" %%a in ("%%i") do (
  5.       set "str=%%a"
  6.       setlocal enabledelayedexpansion
  7.       if "!str!"=="<xml:内容>你好</xml:内容>" (
  8.            >>temp echo ^<xml:内容^>朋友最近好不?^</xml:内容^>
  9.        ) else (>>temp echo !str!)
  10.        endlocal
  11.     )
  12.     move temp "%%i"
  13. )
  14. pause
复制代码

作者: batman    时间: 2011-5-29 11:43

8楼已修改为通用正则。。。
作者: common    时间: 2011-5-29 12:11

<xml:内容>你好</xml:内容>,这句话就占有一行,想修改为:<xml:内容>朋友最近好不?</xml:内容>
REecho off
set var= <xml:内容>你好</xml:内容>,这句话就占有一行,想修改为:<xml:内容>朋友最近好不?</xml:内容>
set var=%var:你好 =朋友最近好%
echo 替换后的值: "%var%"
pause
不知道这样对不对




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2