标题: [问题求助] [已解决]麻烦写个vbs文本替换指定内容/字符串,替换为逐个文件替换形式。 [打印本页]
作者: lateol 时间: 2013-4-27 01:07 标题: [已解决]麻烦写个vbs文本替换指定内容/字符串,替换为逐个文件替换形式。
本帖最后由 pcl_test 于 2017-11-7 12:02 编辑
如 abc文件夹内有 N+个txt文本。
要求每个文本逐个修改替换,替换内容自己输入。
以下为 apang 提供的代码,本人不太会VBS所以无从下手。
一直想写一个这样的BAT 但是好像就凭逐个文件处理这条,似乎不太可能了。。。- Dir =".\==NC=="
- Set FSO = CreateObject("Scripting.FileSystemObject")
- For Each file in FSO.GetFolder(Dir).Files
- Ext = FSO.GetExtensionName(file)
- If Lcase(Ext) = "nc" Then
- RegEx FSO.OpenTextFile(file,1).ReadAll
- End If
- If Lcase(Ext) = "txt" Then
- RegEx FSO.OpenTextFile(file,1).ReadAll
- End If
- If Lcase(Ext) = "ncd" Then
- RegEx FSO.OpenTextFile(file,1).ReadAll
- End If
- If Lcase(Ext) = "pim" Then
- RegEx FSO.OpenTextFile(file,1).ReadAll
- End If
- Next
- Sub RegEx(Text)
- Set Re = New RegExp
- Re.Global = True
- Re.Pattern = "[Ss][1-9]\d*"
- If Not Re.Test(Text) Then Exit Sub
- For Each Match in Re.Execute(Text)
- ReDim PreServe ar(n)
- ar(n) = Match : n = n + 1
- Next
- For i = 0 to Ubound(ar) -1
- For j = i + 1 to Ubound(ar)
- If CInt(Mid(ar(i),2)) > CInt(Mid(ar(j),2)) Then
- Tmp = ar(i) :ar(i) = ar(j) :ar(j) = Tmp
- End If
- Next
- Next
- a = InputBox("☆最小S值:" & ar(0) & " -> ★最大S值:" & ar(UBound(ar)) & _
- vbLf & vbLf & "=========●输入替换后的S值:=========",file.Name,"S4500")
- If IsEmpty(a) Then Exit Sub
- If a = "" Then a = "S4500"
- FSO.OpenTextFile(file,2).Write Re.Replace(Text,a)
- End Sub
复制代码
参考
把查找的字符串直接固定为“==DK_T==“
替换为 G43T1 红色字体固定就行 后面的“1”设为在输入框输入数字1~999 就行。
把显示提示保留。就改成 =====请输入刀库编号 G43T编号 [1~999]=====。
大概就这样。
会bat的也可以试试。
作者: apang 时间: 2013-4-27 10:44
这样?- Dir = "==NC=="
- Set fso = CreateObject("Scripting.FileSystemObject")
-
- For Each file in fso.GetFolder(Dir).Files
- Ext = fso.GetExtensionName(file)
- If Lcase(Ext) = "nc" or Lcase(Ext) = "txt" _
- or Lcase(Ext) = "ncd" or Lcase(Ext) = "pim" Then
- ReplaceStr fso.OpenTextFile(file,1).ReadAll
- End If
- Next
-
- Sub ReplaceStr(str)
- Set re = New RegExp
- re.Pattern = "==DK_T=="
- re.Global = True
- re.IgnoreCase = True
- If not re.Test(str) Then Exit Sub
- Do Until RegEx(a)
- a = InputBox("===输入G43T编号[1~999]===",file.Name,"1")
- If IsEmpty(a) Then Exit Sub
- Loop
- fso.OpenTextFile(file,2).Write re.Replace(str,"G43T" & a)
- End Sub
-
- Function RegEx(a)
- Set reg = New RegExp
- reg.Pattern = "^[1-9]\d{0,2}$"
- RegEx = reg.Test(a)
- 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://bathome.net./) |
Powered by Discuz! 7.2 |