Board logo

标题: [问题求助] [已解决]麻烦写个vbs文本替换指定内容/字符串,替换为逐个文件替换形式。 [打印本页]

作者: lateol    时间: 2013-4-27 01:07     标题: [已解决]麻烦写个vbs文本替换指定内容/字符串,替换为逐个文件替换形式。

本帖最后由 pcl_test 于 2017-11-7 12:02 编辑

如 abc文件夹内有 N+个txt文本。
要求每个文本逐个修改替换,替换内容自己输入。
以下为 apang  提供的代码,本人不太会VBS所以无从下手。
一直想写一个这样的BAT 但是好像就凭逐个文件处理这条,似乎不太可能了。。。
  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" Then
  6. RegEx FSO.OpenTextFile(file,1).ReadAll
  7. End If
  8. If Lcase(Ext) = "txt" Then
  9. RegEx FSO.OpenTextFile(file,1).ReadAll
  10. End If
  11. If Lcase(Ext) = "ncd" Then
  12. RegEx FSO.OpenTextFile(file,1).ReadAll
  13. End If
  14. If Lcase(Ext) = "pim" Then
  15.   RegEx FSO.OpenTextFile(file,1).ReadAll
  16. End If
  17. Next
  18. Sub RegEx(Text)
  19. Set Re = New RegExp
  20. Re.Global = True
  21. Re.Pattern = "[Ss][1-9]\d*"
  22. If Not Re.Test(Text) Then Exit Sub
  23. For Each Match in Re.Execute(Text)
  24.   ReDim PreServe ar(n)
  25.   ar(n) = Match : n = n + 1
  26. Next
  27. For i = 0 to Ubound(ar) -1
  28.   For j = i + 1 to Ubound(ar)
  29.    If CInt(Mid(ar(i),2)) > CInt(Mid(ar(j),2)) Then
  30.     Tmp = ar(i) :ar(i) = ar(j) :ar(j) = Tmp
  31.    End If
  32.   Next
  33. Next
  34. a = InputBox("☆最小S值:" & ar(0) & " -> ★最大S值:" & ar(UBound(ar)) & _
  35.    vbLf & vbLf & "=========●输入替换后的S值:=========",file.Name,"S4500")
  36. If IsEmpty(a) Then Exit Sub
  37. If a = "" Then a = "S4500"
  38. FSO.OpenTextFile(file,2).Write Re.Replace(Text,a)
  39. End Sub
复制代码
参考
把查找的字符串直接固定为“==DK_T==“
替换为 G43T1   红色字体固定就行 后面的“1”设为在输入框输入数字1~999  就行。
把显示提示保留。就改成 =====请输入刀库编号 G43T编号 [1~999]=====。
大概就这样。
会bat的也可以试试。
作者: apang    时间: 2013-4-27 10:44

这样?
  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
复制代码

作者: lateol    时间: 2013-4-27 18:02

本帖最后由 lateol 于 2013-4-27 18:04 编辑

回复 2# apang

好 完美 可以了 再次谢谢 apang  。
作者: lateol    时间: 2013-4-27 18:25

回复 2# apang


    还有请问一个问题,怎么把 得到的路劲文件名显示在 文字信息那里呢?
因为我这面 名字现在标题栏上。看起来有点...  想把它 的当前处理的名字 显示在文字显示那里 “当前处理文件:xxxx.txt”
不知道可以不? 也顺便 参考学习。谢谢!
作者: apang    时间: 2013-4-28 10:26

回复 4# lateol


百度一下,你就知道。关键字:InputBox




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