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

[文本处理] 批处理对文本变量的重新排列及替换

請教各位前輩幫忙
小弟有一些文本的內容如下:

MY_THUMB.appendItem(1,'復仇之戰.part1.rar.jpg','http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435310.jpg'); MY_THUMB.appendItem(2,'復仇之戰.part2.rar.jpg','http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435430.jpg'); MY_THUMB.appendItem(3,'復仇之戰.part3.rar.jpg','http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435609.jpg');

............................以此類推

我想要把所有文本紅色內容替換如下:

/Ref:abc /Rename:復仇之戰.part1.rar http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435310.jpg
/Ref:abc /Rename:復仇之戰.part2.rar http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435310.jpg
/Ref:abc /Rename:復仇之戰.part3.rar http://1.photo.xuite.net/1/e/1/b/leo20010101010/3556063/t/135435310.jpg

請問該如何辦到呢?

拜託幫忙,先說聲感謝!::yct20::

[ 本帖最后由 leo1984 于 2009-10-13 20:35 编辑 ]

回复 39楼 的帖子

因为从27楼开始,需求又变了,囧ing
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 38楼 的帖子

第一个是普通的ansi编码,第二是UTF-8 LITTLE ENDIAN编码,第三个是UTF-8 无 BOM 格式编码,用以下正则:

  1. (\D*\.[a-z]*[0-9]*\.[a-z]*\.[a-z]+)[^a-zA-z]*(\w*:\/\/[^/]*[^.]*\.\w{3})
复制代码


可以匹配第一个和第二个,不过第三个VBS打开是乱码。请你先测试。

TOP

25楼用sed不是已经解决了吗,难道还不行?
技术问题请到论坛发帖求助!

TOP

原帖由 asnahu 于 2009-10-14 22:08 发表
Dim objFSO, objFile, colLines
Dim objRegEx, objMatches, objMatch, aryMatches

Const ForReading   = 1
Const TristateTrue = -1

sFile = "a.txt"

Set objFSO = CreateObject("Scripting.FileSystemOb ...

大哥您有測試我的文本嗎@@

我測試結果是沒有輸出文本b.txt

所以我也不知道哪裡有問題

可以請您測試一下我的文本可否成功

感謝><

TOP

  1. Dim objFSO, objFile, colLines
  2. Dim objRegEx, objMatches, objMatch, aryMatches
  3. Const ForReading   = 1
  4. Const TristateTrue = -1
  5. sFile = "a.txt"
  6. Set objFSO = CreateObject("Scripting.FileSystemObject")
  7. Set objFile = objFSO.OpenTextFile(sFile,1, false, -1)
  8. colLines = objFile.ReadAll
  9. objFile.Close
  10. Set objRegEx = CreateObject("VBScript.RegExp")
  11. objRegEx.Global = True
  12. objRegEx.IgnoreCase = True
  13. objRegEx.Pattern = "(\D*\.[a-z]*[0-9]*\.[a-z]*\.[a-z]+)[^a-zA-z]*(\w+:\/\/\d\.\w+\.\w+\.\w+\/\d\/\d\/\w\/\d\/\w*\d*\/\d*\/\w\/\d*\.\w{3})"
  14. Set objMatches = objRegEx.Execute(colLines)
  15. For Each objMatch in objMatches
  16.         objMatch = Replace(objMatch, ".jpg','", " ")
  17.         objMatch = "/Ref:abc /Rename:" & objMatch
  18.         aryMatches = aryMatches & objMatch & vbCrLf
  19. Next
  20. Set strFile = objFSO.CreateTextFile("b.txt", True)
  21. strFile.Write aryMatches
  22. strFile.Close
  23. Set objFSO   = Nothing
  24. Set objRegEx = Nothing
复制代码

TOP

原帖由 zqz0012005 于 2009-10-14 20:50 发表
对27楼的文本,你确认是用Unicode 格式打开的吗?
fso.OpenTextFile("a.txt", 1, false, -1)


我傳的文本是big5繁體中文碼

我另傳一個utf-8的碼給您看看

TOP

原帖由 asnahu 于 2009-10-14 18:44 发表
还是正则来得快点,VBS:

Dim objFSO, objFile, colLines
Dim objRegEx, objMatches, objMatch, aryMatches

Const ForReading   = 1
Const TristateTrue = -1

sFile = "a.txt"

Set objFSO = CreateObj ...

大哥
"復仇之戰"這些字不能當成變量,那是不固定的@@

另外可以請您幫我處理完字串後輸出文本嗎,像是b.txt
謝謝

[ 本帖最后由 leo1984 于 2009-10-14 21:50 编辑 ]

TOP

谢谢斑竹,参数没用上,现在可以了。

TOP

对27楼的文本,你确认是用Unicode 格式打开的吗?
fso.OpenTextFile("a.txt", 1, false, -1)
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 31楼 的帖子

不知何故,用unicode的方式打开读取文本2的内容只得到了一个问号,不解中...望斑竹测试一下。

TOP

回复 29楼 的帖子

OpenTextFile 方法的语法是
OpenTextFile(filename[, iomode[, create[, format]]])

iomode 参数可以是下列设置中的任一种:

常数描述
ForReading1以只读方式打开文件。不能写这个文件。
ForWriting2以写方式打开文件
ForAppending8打开文件并从文件末尾开始写。

format 参数可以是下列设置中的任一种:
常数 描述
TristateTrue -1 以 Unicode 格式打开文件。
TristateFalse 0 以 ASCII 格式打开文件。
TristateUseDefault -2 使用系统默认值打开文件。


LZ的文本是Unicode格式。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

还是正则来得快点,VBS:

  1. Dim objFSO, objFile, colLines
  2. Dim objRegEx, objMatches, objMatch, aryMatches
  3. Const ForReading   = 1
  4. Const TristateTrue = -1
  5. sFile = "a.txt"
  6. Set objFSO = CreateObject("Scripting.FileSystemObject")
  7. Set objFile = objFSO.OpenTextFile(sFile,1, false, -1)
  8. colLines = objFile.ReadAll
  9. objFile.Close
  10. Set objRegEx = CreateObject("VBScript.RegExp")
  11. objRegEx.Global = True
  12. objRegEx.IgnoreCase = True
  13. objRegEx.Pattern = "(復仇之戰\.[a-z]*[0-9]*\.[a-z]*\.[a-z]+)[^a-zA-z]*(\w+:\/\/\d\.\w+\.\w+\.\w+\/\d\/\d\/\w\/\d\/\w*\d*\/\d*\/\w\/\d*\.\w{3})"
  14. Set objMatches = objRegEx.Execute(colLines)
  15. For Each objMatch in objMatches
  16.         objMatch = Replace(objMatch, ".jpg','", " ")
  17.         objMatch = "/Ref:abc /Rename:" & objMatch
  18.         aryMatches = aryMatches & objMatch & vbCrLf
  19. Next
  20. Wscript.Echo aryMatches
  21. Set objFSO   = Nothing
  22. Set objRegEx = Nothing
复制代码



[ 本帖最后由 asnahu 于 2009-10-14 21:44 编辑 ]

TOP

原帖由 asnahu 于 2009-10-14 08:52 发表
不知是否编码问题,第二个文本始终得不到正确结果,VBS也歇菜了。以下代码针对第一个文本:

Dim objFSO,objRegEx
Const ForReading = 1
sFile = "a.txt"

Dim objFSO,oFile,colLines
Set objFSO = CreateObj ...

非常謝謝你

現在的問題出在第二文本@@

不過也見識到這命令這麼多元的寫法

TOP

回复 27楼 的帖子

不知是否编码问题,第二个文本始终得不到正确结果,VBS也歇菜了。以下代码针对第一个文本:
  1. Dim objFSO,objRegEx
  2. Const ForReading = 1
  3. sFile = "a.txt"
  4. Set objFSO = CreateObject("Scripting.FileSystemObject")
  5. Set oFile = objFSO.OpenTextFile(sFile,  1, TristateTrue)
  6. colLines = oFile.ReadAll
  7. oFile.Close
  8. Set objRegEx = CreateObject("VBScript.RegExp")
  9. objRegEx.Global = True
  10. objRegEx.IgnoreCase = True
  11. objRegEx.Pattern = "MY_THUMB.*jpg"
  12. Set Matches = objRegEx.Execute(colLines)
  13. For Each objMatch in Matches
  14.      aryLines = aryLines & objMatch & vbCrLf
  15. Next
  16. aryLines = Split(aryLines, ";")
  17. For i = 0 To Ubound(aryLines) - 1
  18.     var_1 = Replace(Replace(Split(aryLines(i), ",")(1),".jpg", ""),"'", "")
  19.     var_2 = Replace(Replace(Split(aryLines(i), ",")(2),"'",""), ")", "")
  20.     strLine = "/Ref:abc /Rename:" & var_1 & " " & var_2 & vbCrLf
  21.     strLines = strLines & strLine & vbCrLf
  22. Next
  23. Wscript.Echo strLines
  24. Set objFSO   = Nothing
  25. Set objRegEx = Nothing
复制代码

[ 本帖最后由 asnahu 于 2009-10-14 18:01 编辑 ]

TOP

返回列表