vbs 文件操作集

最近遇到一个应用,要求将指定文件夹下的所有 html 文件中包含的某些文字的文件给改名。下面是我写的一个 vbs 文件:
复制代码
rename.vbs
'关键字配置文件地址 
Const config = "E:\cleandata\key.txt"

'要检查的文件夹 
Const dir = "D:\Log\html\"

'日志保存路径 
Const LogDir = "E:\cleandata\Log\"

'全局对象 
set fso=createobject("scripting.filesystemobject")  

Dim keywordList(10000)

Rem : =========== 启动主程序 
Dim starttime , Endtime

starttime 
= Now 
Call main()
endtime 
= Now 

Set fso = Nothing 

msgbox  "恭喜!操作已完成。时间从:" & starttime & " 到 " & endtime   ,4096,"文件重命名"

Rem :  =========== 主程序
Sub main()
    wscript.echo 
"开始。。。" & Now 
    
Call GetKeyWord()
    
Call getFiles(dir)
End Sub 

Rem :  ===========  读取配置文件
Sub GetKeyWord()
    
set sdir = createobject("scripting.dictionary")  
    
set file = fso.opentextfile(config)  
    
do while file.atendofstream<>true  
        m
=m+1  
        sdir.add m,file.readline  
        
Dim word
        word 
= sdir(m)
'        wscript.echo word 
        If Len(Trim(word) )>0 Then 
            KeywordList(m)
= word
        
End If 
    
Loop 
    file.close  
    
Set file = Nothing 
End Sub 

Rem :  =========== 获取文件列表 
Sub getFiles(path)
    
Set folder = fso.GetFolder(path)
    
Set subfolder = folder.subfolders
    
Set file = folder.files
    
For Each s_file In file
        
'wscript.echo s_file.path
        checkWord s_file.path
    
Next 

    
For Each s_subfolder In subfolder
        getFiles(s_subfolder.path)    
'递归调用 
    Next 
End Sub 

Rem :  ===========  比较配置文件,判断是否包含关键字 
Sub checkWord(path)
    
'wscript.echo path
    Dim content , file 
    
Set file = fso.opentextfile(path, 1false
    content 
= file.readall
    file.close
    
Set file = Nothing 
    
For i=0 To UBound(keywordList)
        word 
= keywordList(i)
        
If InStr(content, word )>0 And Len(word)>0 Then 
            wscript.echo path 
& " 已匹配到:" & word
'            Set file = Nothing 
            RenameSubPage path
            
Exit For 
        
End If 
    
Next 
End Sub 

Rem : =========== 将文件重命名
Sub RenameSubPage(path)
    
If fso.fileexists(path) =True Then 
        
Dim target , ext
        ext 
= ".bak"
        target 
= path & ext
        
' ===== 方法一 
        fso.movefile path , target

        
' ===== 方法二 
        'Set f = fso.getfile( path)
        'f.name = f.name & ext 
        'f.close 
        'Set f = Nothing 

        WriteLog target
    
End If 
End Sub 

Rem :  ===========  处理日志
Sub WriteLog(strmsg)
    
Dim logtxt
    logtxt 
= LogDir & "dellog-" & Year(Now& "-" & Month(Now& "-" & Day(Now& ".txt"
    
    
Dim f 
    
If fso.fileexists(logtxt) Then 
        
Set f = fso.opentextfile(logtxt, 8 )
    
Else
        
Set f = fso.opentextfile(logtxt, 2true)
    
End If 

    f.writeline strmsg 
    f.close 
    
Set f = Nothing 
    
    
' ===== 方法2 
'
    Set objShell = CreateObject("Wscript.Shell") 
'
    cmd = "%comspec% /k echo " & strmsg & " >> " &  logtxt & "  && exit"
'
    objShell.Run(cmd) ,vbhide
    ' 挂起允许,防止在任务管理器里产生过多的 cmd.exe 进程 ,如果有多个进程,请用 taskkill /f /im cmd.exe   关闭
'
    Set objShell = Nothing 

    Wscript.Sleep 
5    
End Sub 
复制代码


key.txt 文件的内容:

关键字一
关键字一

即一行一个关键字 。


这是 VBS 版批量重命名 的一个改良版。

posted on   感恩的心  阅读(3114)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2009年12月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
点击右上角即可分享
微信分享提示