找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28955|回复: 9

[文本处理] 批处理如何复制文本某内容到另一文本某位置?

[复制链接]
发表于 2014-11-20 12:43:28 | 显示全部楼层 |阅读模式
描述:桌面上有两个文本快捷方式,分别名为:*周志.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

大神大神,急求急求!:)
 楼主| 发表于 2014-11-20 13:59:24 | 显示全部楼层
大神,你在哪里?!
发表于 2014-11-20 16:09:43 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2014-11-20 16:29:15 | 显示全部楼层
大神 运行后出现错误,提示:缺少对象:'ParseName(...)'
发表于 2014-11-20 16:40:24 | 显示全部楼层
回复 4# Aolnle


    LNK文件放要到桌面,第5行的 周志.LNK 日志.LNK文件名改成实际的文件名
 楼主| 发表于 2014-11-20 17:09:28 | 显示全部楼层
回复 5# apang

大神 这次出现了行1 字符13 输出超出了文件尾的错误
发表于 2014-11-20 17:16:53 | 显示全部楼层
回复 6# Aolnle


    把你测试的文件打包,上传,我试试
发表于 2014-11-20 17:26:49 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2014-11-20 18:18:51 | 显示全部楼层
回复 8# amwfjhh 大神,你完美的解决了我的问题,多谢!!
 楼主| 发表于 2014-11-20 18:21:44 | 显示全部楼层
回复 7# apang

多谢大神,问题解决了,辛苦了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 15:02 , Processed in 0.020376 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表