Board logo

标题: [文本处理] 批处理如何复制文本某内容到另一文本某位置? [打印本页]

作者: Aolnle    时间: 2014-11-20 12:43     标题: 批处理如何复制文本某内容到另一文本某位置?

描述:桌面上有两个文本快捷方式,分别名为:*周志.link    *日志.link
周志文本内容形式如下:
(1)XXXXX
(2)YYYYYY
        ZZZZZ
(3)XXXXX
日志文本内容形式如下:
1、XXXXXX
2、XXXXXX
3、
4、XXXXXX
请问如何以批处理运行打开*周志.link所指向的文本,复制(2)所包含的部分并粘贴到*日志.link所指向的文本中的3、后面,运行后期待结果如下:
运行后日志文本内容:
1、XXXXXX
2、XXXXXX
3、YYYYYYY
     ZZZZZZ
4、XXXXXX

大神大神,急求急求!:)
作者: Aolnle    时间: 2014-11-20 13:59

大神,你在哪里?!
作者: apang    时间: 2014-11-20 16:09

本帖最后由 apang 于 2014-11-26 10:03 编辑

试试vbs
  1. ''桌面文件夹路径
  2. strDesk = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  3. Set objShell = CreateObject("Shell.Application")
  4. Set objFolder = objShell.Namespace(strDesk)
  5. ''快捷方式的目标文件路径
  6. strPath1 = objFolder.ParseName("周志.Lnk").GetLink.Path
  7. strPath2 = objFolder.ParseName("日志.Lnk").GetLink.Path
  8. Set fso = CreateObject("Scripting.FileSystemObject")
  9. ''读取目标文件内容
  10. txt1 = fso.OpenTextFile(strPath1, 1).ReadAll
  11. txt2 = fso.OpenTextFile(strPath2, 1).ReadAll
  12. ''建立正则表达式,替换文本内容
  13. Set re = New RegExp
  14. re.Pattern = "^ *(2)([\s\S]*?)(?=^ *()"
  15. re.MultiLine = True
  16. If Not re.Test(txt1 & vbCrLf & "(") Then WScript.Quit
  17. s = re.Execute(txt1 & vbCrLf & "(")(0).SubMatches(0)
  18. re.Pattern = "(3、).*(\n|$)"
  19. txt2 = re.Replace(txt2, "$1" & s)
  20. fso.OpenTextFile(strPath2, 2).Write txt2
复制代码

作者: Aolnle    时间: 2014-11-20 16:29

大神 运行后出现错误,提示:缺少对象:'ParseName(...)'
作者: apang    时间: 2014-11-20 16:40

回复 4# Aolnle


    LNK文件放要到桌面,第5行的 周志.LNK 日志.LNK文件名改成实际的文件名
作者: Aolnle    时间: 2014-11-20 17:09

回复 5# apang

大神 这次出现了行1 字符13 输出超出了文件尾的错误
作者: apang    时间: 2014-11-20 17:16

回复 6# Aolnle


    把你测试的文件打包,上传,我试试
作者: amwfjhh    时间: 2014-11-20 17:26

本帖最后由 amwfjhh 于 2014-11-20 17:34 编辑
  1. @ECHO off
  2. :_start
  3. set /p lnkA=拖入周志快捷方式:
  4. set /p lnkB=拖入日志快捷方式:
  5. if "%lnkA%" EQU "" echo 输入参数不全,请重试&pause&goto :_start
  6. if "%lnkB%" EQU "" echo 输入参数不全,请重试&pause&goto :_start
  7. set "lnkA=%lnkA:\=\\%"
  8. set "lnkB=%lnkB:\=\\%"
  9. for /f "skip=1 delims=" %%i in ('wmic path win32_shortcutfile where Name^="%lnkA%" get target') do set "filA=%%i"
  10. for /f "skip=1 delims=" %%i in ('wmic path win32_shortcutfile where Name^="%lnkB%" get target') do set "filB=%%i"
  11. set fil
  12. for /f "tokens=1 delims=[]" %%i in ('^<"%filA%" find /n "(2)"') do set /a offset=%%i
  13. set /a offset-=1
  14. echo offset : %offset%
  15. (for /f "tokens=*" %%i in ('^<"%filA%" more +%offset%') do (
  16. (echo %%i | findstr /v "(3)") && call set strRe=%%strRe%%%%i || GOTO :_read_end
  17. ))>nul
  18. :_read_end
  19. set strRe=%strRe:~3%
  20. echo %strRe%
  21. (for /f "tokens=*" %%i in (%filB%) do (
  22. (echo %%i | findstr /v "3、") || echo 3、%strRe%
  23. ))>new.txt
  24. start new.txt
  25. pause
复制代码

作者: Aolnle    时间: 2014-11-20 18:18

回复 8# amwfjhh 大神,你完美的解决了我的问题,多谢!!
作者: Aolnle    时间: 2014-11-20 18:21

回复 7# apang

多谢大神,问题解决了,辛苦了!




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