标题: [文本处理] 批处理如何复制文本某内容到另一文本某位置? [打印本页]
作者: 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- ''桌面文件夹路径
- strDesk = CreateObject("WScript.Shell").SpecialFolders("Desktop")
-
- Set objShell = CreateObject("Shell.Application")
- Set objFolder = objShell.Namespace(strDesk)
- ''快捷方式的目标文件路径
- strPath1 = objFolder.ParseName("周志.Lnk").GetLink.Path
- strPath2 = objFolder.ParseName("日志.Lnk").GetLink.Path
-
- Set fso = CreateObject("Scripting.FileSystemObject")
- ''读取目标文件内容
- txt1 = fso.OpenTextFile(strPath1, 1).ReadAll
- txt2 = fso.OpenTextFile(strPath2, 1).ReadAll
-
- ''建立正则表达式,替换文本内容
- Set re = New RegExp
- re.Pattern = "^ *(2)([\s\S]*?)(?=^ *()"
- re.MultiLine = True
- If Not re.Test(txt1 & vbCrLf & "(") Then WScript.Quit
- s = re.Execute(txt1 & vbCrLf & "(")(0).SubMatches(0)
- re.Pattern = "(3、).*(\n|$)"
- txt2 = re.Replace(txt2, "$1" & s)
- 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 编辑
- @ECHO off
-
- :_start
- set /p lnkA=拖入周志快捷方式:
- set /p lnkB=拖入日志快捷方式:
-
- if "%lnkA%" EQU "" echo 输入参数不全,请重试&pause&goto :_start
- if "%lnkB%" EQU "" echo 输入参数不全,请重试&pause&goto :_start
-
- set "lnkA=%lnkA:\=\\%"
- set "lnkB=%lnkB:\=\\%"
-
- for /f "skip=1 delims=" %%i in ('wmic path win32_shortcutfile where Name^="%lnkA%" get target') do set "filA=%%i"
- for /f "skip=1 delims=" %%i in ('wmic path win32_shortcutfile where Name^="%lnkB%" get target') do set "filB=%%i"
-
- set fil
-
- for /f "tokens=1 delims=[]" %%i in ('^<"%filA%" find /n "(2)"') do set /a offset=%%i
- set /a offset-=1
- echo offset : %offset%
-
- (for /f "tokens=*" %%i in ('^<"%filA%" more +%offset%') do (
- (echo %%i | findstr /v "(3)") && call set strRe=%%strRe%%%%i || GOTO :_read_end
- ))>nul
- :_read_end
- set strRe=%strRe:~3%
- echo %strRe%
-
- (for /f "tokens=*" %%i in (%filB%) do (
- (echo %%i | findstr /v "3、") || echo 3、%strRe%
- ))>new.txt
- start new.txt
- 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 |