[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何修改文本文件某一行内容?

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

比如:文本文件里的某一行内容为
<xml:内容>你好</xml:内容>,这句话就占有一行,想修改为:<xml:内容>朋友最近好不?</xml:内容>

具体情况具体分析,批处理的编写是不能脱离实际背景的,请楼主在顶楼更新一下,标明具体要求、前后样本

TOP

2# zm900612


修改了下贴子,请查看下。

TOP

楼主的说明不太给力啊,我只好按照我的理解来回复了...
  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
复制代码

TOP

头痛的特殊字符>,还是用vbs来处理吧。。。
***共同提高***

TOP

4# zm900612


别忘了,是遍历文件夹,遍历所有TXT文件。不是一个文件。

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

未测试,运行前先备份源文件。。。。。切记!!!
:
  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
复制代码
技术问题请到论坛发帖求助!

TOP

8楼已修改为通用正则。。。
***共同提高***

TOP

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

TOP

返回列表