Board logo

标题: [问题求助] [已解决]麻烦修改个VBS替换文本的 [打印本页]

作者: lateol    时间: 2013-5-25 18:22     标题: [已解决]麻烦修改个VBS替换文本的

自己研究了很久 始终弄不懂这个替换的结构。
  1. Dir = "==NC=="
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. For Each file in fso.GetFolder(Dir).Files
  4.    Ext = fso.GetExtensionName(file)
  5.    If Lcase(Ext) = "nc" or Lcase(Ext) = "txt" _
  6.       or Lcase(Ext) = "ncd" or Lcase(Ext) = "pim" Then
  7.       ReplaceStr fso.OpenTextFile(file,1).ReadAll
  8.    End If
  9. Next
  10. Sub ReplaceStr(str)
  11.    Set re = New RegExp
  12.    re.Pattern = "==DK_T=="
  13.    re.Global = True
  14.    re.IgnoreCase = True
  15.    If not re.Test(str) Then Exit Sub
  16.    Do Until RegEx(a)
  17.       a = InputBox("===输入G43T编号[1~999]===",file.Name,"1")
  18.       If IsEmpty(a) Then Exit Sub
  19.    Loop
  20.    fso.OpenTextFile(file,2).Write re.Replace(str,"G43T" & a)
  21. End Sub
  22. Function RegEx(a)
  23.    Set reg = New RegExp
  24.    reg.Pattern = "^[1-9]\d{0,2}$"
  25.    RegEx = reg.Test(a)
  26. End function
复制代码
以上代码处理是 查找字符串"==DK_T==" 替换为 "G43Txx"  且是逐个文件修改
现在麻烦再改改 改成以下形式
查找 查找字符串"==DK_T==" 和 "==DK_T2=="  找到后 "==DK_T==" 替换为"G43TXX"  "==DK_T2==" 替换为M6HXXZ100.
输入框 如 输入 1 后 xxx.txt文本内包含"==DK_T==" 就替换为"G43T1"  "==DK_T2==" 替换为M6H1Z100. 且输入框 数值1 自增+1
以此类推。
这样可以实现吗?
注:如当前目录有9个 txt文本 都包含以上要替换的字符串,处理就只跳出VB窗口9次 没一次替换中是直接查找两个字符串 然后替换成两个不同字符串,就是自定义输入框的数值的一样的。
谢谢。
作者: suiyanlovetian    时间: 2013-5-25 19:37

本帖最后由 suiyanlovetian 于 2013-5-25 19:42 编辑

听得不太明白。lz能否再详细讲讲。改起来很容易的。
作者: lateol    时间: 2013-5-25 20:21

本帖最后由 lateol 于 2013-5-25 20:28 编辑

回复 2# suiyanlovetian


    也就是说 把文本 内包含的"==DK_T=="和"==DK_T2==字符串都分别替换为G43TXX 和 M6HXXZ100。 XX表示输入框内自定义要输入的值【1~999】
比如说 框内输入4 则 吧该文本内的"==DK_T=="和"==DK_T2==字符串替换成G43T4 和 M6H4Z100。 是同时替换。
作者: lateol    时间: 2013-5-25 20:29

回复 2# suiyanlovetian


    呵呵 不好意思 错别字有点多 嘻嘻。改过来了
作者: suiyanlovetian    时间: 2013-5-25 20:40

嗯,我明白了,vbs稍微学了点,也不久,正好练练手、根据你说的,不麻烦的。我试试先哈~
作者: apang    时间: 2013-5-25 20:43

楼主哇,我这代码并非什么好代码,就不要贴在这里献丑了。。。

再说,要是我来做,我宁愿重新来做,也不愿意在别人代码上修修补补

再再说,您发错板块啦
作者: lateol    时间: 2013-5-25 20:51

回复 6# apang


    好吧 那帮我重做一个 非常感谢,很简单 就是在 查找字符串哪里再加多一个。"==DK_T2== 替换为 M6H值Z100.
  就等你的出现了。
作者: apang    时间: 2013-5-25 20:59

回复 7# lateol


    为什么就认为我一定会帮你呢?你知道你这样说话会得罪好多好多人吗?
作者: suiyanlovetian    时间: 2013-5-25 21:42

  1. Dir = "==NC=="
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. For Each file in fso.GetFolder(Dir).Files
  4.    Ext = fso.GetExtensionName(file)
  5.    If Lcase(Ext) = "nc" or Lcase(Ext) = "txt" _
  6.       or Lcase(Ext) = "ncd" or Lcase(Ext) = "pim" Then
  7.       ReplaceStr fso.OpenTextFile(file,1).ReadAll
  8.    End If
  9. Next
  10. Sub ReplaceStr(str)
  11.    Dim re_str1, re_str2
  12.    Set re = New RegExp
  13.    re.Pattern = "==DK_T(2)?=="
  14.    re.Global = True
  15.    re.IgnoreCase = True
  16.    If not re.Test(str) Then Exit Sub
  17.    Do Until RegEx(a)
  18.       a = InputBox("===输入编号[1~999]===",file.Name,"1")
  19.       If IsEmpty(a) Then Exit Sub
  20.    Loop
  21.    
  22.    re_str1 = Replace(str, "==DK_T==", "G43T" & a)
  23.    re_str2 = Replace(re_str1, "==DK_T2==", "M6H" & a & "Z100")
  24.    fso.OpenTextFile(file,2).Write re_str2
  25. End Sub
  26. Function RegEx(a)
  27.    Set reg = New RegExp
  28.    reg.Pattern = "^[1-9]\d{0,2}$"
  29.    RegEx = reg.Test(a)
  30. End function
复制代码

作者: lateol    时间: 2013-5-25 22:16

回复 8# apang


    呵呵 不管怎么样,我还是非常感谢你的。如果不喜欢提上你的名 以后低调就是。
作者: lateol    时间: 2013-5-25 22:18

回复 9# suiyanlovetian
可以 就这样。值没自增+1




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