【VBS】超级实用小实例:仅用数字编号打开任意指定文件夹(超超超级全面指南)
【VBS】實用鏈接指南
- Hello World!
- 序
- 1、目的
- 2、需求分析
- 3、舉例
- 4、思路
- 一、上手編程語言初步
- (一)Visual Basic快速入門
- (二)簡潔的代碼編輯器推薦
- 1. Sublime Text 下載
- 2. VB代碼語法高亮設置
- 3. 中文亂碼或報錯解決
- 二、創建最簡單的窗口
- (一)教你用怎么vbs寫一個簡易的對話框
- (二)vbs輸入框和消息框
- (三)VBS中InputBox函數的返回值使用技巧
- 三、常見問題與操作
- (一)VBS腳本一行代碼太長,使用換行符
- (二)vbs執行顯示中文亂碼怎么辦
- 四、APIs
- (一)大佬的博客
- 1. 測試開發技術—VBS隨筆
- (二)字符串操作
- 1. VBS中常見字符串操作函數
- 2. vbs vbscript 中的回車換行符號 等特殊字符
- (三)數組
- (四)文件文件夾操作
- 1. VBS對文件文件夾操作的例子
- 五、產品其他完善度相關
- (一)“正規軟件外形”
- 1、怎么修改桌面快捷方式圖標
- 2、怎樣把一般的圖片變成圖標格式
- 后記:小項目現狀
- v1.0 純粹面向過程編程源碼
- v2.0 純粹面向過程編碼,良好函數抽象封裝
- 1、架構圖
- 2、源碼
- v4.0 自動化獲取vbs文件所在文件夾目錄層次結構,代替了手動輸入文件夾名稱數組的硬編碼(我的同事正在使用這一個比較穩定的版本)
- v4.1 在v4.0基礎上,增加了夸獎人的隨機形容詞功能
- v5.0 增加了自動獲取并顯示文件夾名稱結構層次的顯示功能
注意:僅限Windows系統!
Hello World!
桌面新建個txt文本,打開寫上如下內容:
msgbox "Hello World!"保存,文件后綴再改為“vbs”即可執行,
(如果沒有顯示后綴名,自行百度解決)
雙擊運行,
完美的Windows系統上的迷你小窗口!
內容就是:
Hello World!
簡單的要命,有木有,哈哈哈!
序
1、目的
Windows系統上用最簡單的方法直接創建窗口程序,
需要有常見編程語言的語法基礎。
我之前沒有學過vbs,
但本身是軟件工程專業科班生,
具有一定的其他多種語言的編程基礎。
先有實踐的問題,再想解決問題,而出現的此文章,
并不是憑空捏造的問題與文章及程序。
2、需求分析
一個盤里的文件名字開頭全有10以內數字編號開頭,
要求彈出窗口輸入一串數字編號,
便可以打開指定文件夾。
(程序是小事,
實際上如何給每個人電腦上所有文件夾合適的分類
才是根本問題!)
3、舉例
彈出交互窗口輸入“122”,點擊確認,
即可打開文件夾地址為:
“E:\工作\1、人事\2、培訓\2、實習期”。
其中,后面的頓號和漢字是任意的,
只關注文件名前面的數字即可。
4、思路
以需求的解決邏輯和一步步遇見的問題為思路,
去逐步百度搜索。
以下提供的所有的鏈接,
都是只要解決問題就可以,
幾乎都不用全部瀏覽。
有編程基礎的會上手的很快。
一、上手編程語言初步
(一)Visual Basic快速入門
https://blog.csdn.net/achenyuan/article/details/83987056
如果有其他編程語言基礎,這個不用看,當做語法工具書查閱即可。
(二)簡潔的代碼編輯器推薦
Sublime Text 3
我一開始用的Notepad++,
可惜玩了半天突然不支持VB的語法高亮了???
又問度娘搜到了這個,非常棒!
1. Sublime Text 下載
地址:https://www.sublimetext.com/
2. VB代碼語法高亮設置
(后來我又找不到VB了,用ASP也行)
3. 中文亂碼或報錯解決
sublime text 3支持GBK編碼
https://www.cnblogs.com/wxdblog/p/7992854.html
二、創建最簡單的窗口
(一)教你用怎么vbs寫一個簡易的對話框
https://jingyan.baidu.com/article/22fe7cedd478133002617f23.html
注意: 中文可能報錯或亂碼,粗暴解決,用英文即可。
(二)vbs輸入框和消息框
https://jingyan.baidu.com/article/9f63fb91492403c8410f0e4b.html
(三)VBS中InputBox函數的返回值使用技巧
https://www.jb51.net/article/26809.htm
三、常見問題與操作
(一)VBS腳本一行代碼太長,使用換行符
http://www.51testing.com/html/85/87885-17546.html
(二)vbs執行顯示中文亂碼怎么辦
https://jingyan.baidu.com/article/95c9d20d81c67dad4f756111.html
四、APIs
(一)大佬的博客
1. 測試開發技術—VBS隨筆
https://www.cnblogs.com/jinjiangongzuoshi/category/491750.html
其中的:VBS基礎篇 - 對象(1) - Class對象
用來學習面向對象形式的寫法還挺不錯的!!!
(二)字符串操作
1. VBS中常見字符串操作函數
https://www.jb51.net/article/159913.htm
2. vbs vbscript 中的回車換行符號 等特殊字符
https://www.dazhuanlan.com/2020/06/02/5ed645c962d9a/
(三)數組
動態數組:https://www.jb51.net/article/141114.htm
(四)文件文件夾操作
1. VBS對文件文件夾操作的例子
http://www.360doc.com/content/14/0606/15/219800_384287850.shtml
(五)vbs如何獲取當前時間日期
http://www.jquerycn.cn/a_9237
五、產品其他完善度相關
將自己的vbs文件放到磁盤中合適的文件中,
然后右擊發送到桌面快捷方式。
然后桌面就有快捷方式了,
它的圖標是可以隨意改變的,
可用其他圖片,或自行設計圖片。
詳細步驟參考如下:
(一)“正規軟件外形”
1、怎么修改桌面快捷方式圖標
百度經驗鏈接
2、怎樣把一般的圖片變成圖標格式
推薦這個:轉轉大師,在線的,鏈接如下:
http://pdftoword.55.la/img2icon/
后記:小項目現狀
v1.0 純粹面向過程編程源碼
' ' 候帥洲 ' ' 手機和微信:175 3102 3301 ' ' 此小項目CSDN詳解博客地址:https://blog.csdn.net/weixin_44591035/article/details/113667614 ' ' ' ' 1、需求分析 ' 一個盤里的文件名字開頭全有10以內數字編號開頭, ' 要求彈出窗口輸入一串數字編號,便可以打開指定文件夾。 ' ' 2、舉例 ' 彈出交互窗口輸入“122”,點擊確認, ' 即可打開文件夾地址為: ' “E:\工作\1、人事\2、培訓\2、實習期”。 ' 其中,后面的頓號和漢字是任意的, ' 只關注文件名前面的數字即可。 ' ' 3、目前進度 ' 以硬編碼實現了第一個實用版本(v1.0:純粹面向過程編碼) ' 已經可以投入現實使用了,一位美女同事已經用上了 ' 以后逐漸慢慢迭代版本吧' 一、初始化與主窗口創建' (一)定義變量與初始化' 1. 定義和初始化目錄結構 ' (1)先硬編碼根目錄 dim strRootDir strRootDir = "E:\工作\"' (2)先硬編碼所有分目錄 dim idDirArr idDirArr = Array( _"1", "1、人事", _"2", "2、顧問", _"3", "3、個人", _"4", "4、待整理", __"11", "1、招聘", _"12", "2、培訓", _"13", "3、制度", _"14", "4、活動", __"111", "1、專業知識", _"112", "2、招聘簡章", _"113", "3、簡歷", _"114", "4、統計", _"115", "5、素材", _"116", "6、其他資料", __"120", "0、按類型分類匯總", _"121", "1、七天入職新員工培訓", _"122", "2、實習期", _"123", "3、其他機構" _ )' 2. 定義和初始化各類窗口標題 dim mainWinTitle, tipsWinTitle ' (1)主窗口標題 mainWinTitle = "博瑞智(邯鄲)家庭教育服務中心-孫文" ' (2)提示窗口標題 tipsWinTitle = "來自候帥洲的溫馨提示"' 3. 定義和初始化各種健壯性處理提示用語 dim strTipsTemp0, strTipsTemp1, strTipsTemp2, strTipsTemp3 ' (1)提示位置:一、(二) strTipsTemp0 = vbCrLf + "世界上最漂亮的孫文!" + vbCrLf _+ vbCrLf + "請輸入要打開的文件夾編號吧!" ' (2)提示位置:二、(二) strTipsTemp1 = "您沒有輸入任何編號哦!!!" ' (3)提示位置:二、(三) strTipsTemp2 = "您的輸入不是純數字哦!!!" ' (4)提示位置:三、(二) strTipsTemp3 = "您的輸入的編號沒有對應的文件夾哦!!!"' (二)創建交互輸入框 dim id id = inputbox(strTipsTemp0,mainWinTitle)' 二、健壯性處理' (一)如果inputbox返回值為Empty,即用戶點擊的是“取消”; If IsEmpty(id) Then WScript.Quit End If' (二)輸入框內容為空時直接點擊“確定”; If Len(id) = 0 Then msgbox strTipsTemp1, vbokcancel + vbInformation, tipsWinTitleWScript.Quit End If' (三)id有字符但為非純數字時 If Not isnumeric(id) Thenmsgbox strTipsTemp2, vbokcancel + vbInformation, tipsWinTitleWScript.Quit end if' 三、主邏輯處理 ' (id為純數字時) ' (一)目錄結構字典的定義和初始化 ' 將目錄結構“id-目錄”放入鍵值對字典對象——idDirDict dim idDirDict, i Set idDirDict = WSH.CreateObject("Scripting.Dictionary") For i = 0 to UBound(idDirArr)idDirDict.Add idDirArr(i), idDirArr(i + 1)i = i + 1 Next' (二)健壯性處理 ' 判斷指定的key是否存在 If Not idDirDict.Exists(id) Thenmsgbox strTipsTemp3, vbokcancel + vbInformation, tipsWinTitleWScript.Quit End If ' (三)最終處理 ' 1. 確定目錄存在后,拼接絕對目錄 dim strFinalDir For i = 0 to Len(id) - 1strFinalDir = strFinalDir + "\" + idDirDict.Item(left(id, i + 1)) Next ' 2. 打開目標文件夾,結束 Dim ObjWS Set ObjWS = WScript.CreateObject("wscript.shell") ObjWS.run strRootDir + strFinalDirv2.0 純粹面向過程編碼,良好函數抽象封裝
1、架構圖
2、源碼
' ' 候帥洲 ' ' 手機和微信:175 3102 3301 ' ' 此小項目CSDN詳解博客地址:https://blog.csdn.net/weixin_44591035/article/details/113667614 ' ' ' 1、需求分析 ' 一個盤里的文件名字開頭全有10以內數字編號開頭, ' 要求彈出窗口輸入一串數字編號,便可以打開指定文件夾。 ' ' 2、舉例 ' 彈出交互窗口輸入“122”,點擊確認, ' 即可打開文件夾地址為: ' “E:\工作\1、人事\2、培訓\2、實習期”。 ' 其中,后面的頓號和漢字是任意的, ' 只關注文件名前面的數字即可。 ' ' 3、目前進度 ' 以硬編碼實現的第二個版本,v2 ' 還是純粹面向過程編碼,但都已良好封裝函數, ' 函數抽象合適,函數之間有良好簡潔且固定的層次關系 ' 以后逐漸慢慢迭代版本吧 ' ' ' 程序入口 ' ' 馬克思寫法,邏輯在物質中辯證存在,唯物主義辯證法 ' Call MainWin()' ' 一、主窗口 ' ' 主窗口總函數 ' Sub MainWin() ' dim id, mainWinTitle, mainWinTips ' Call Init_MainWin(mainWinTitle, mainWinTips) ' ' 創建交互輸入框 ' id = inputbox(mainWinTips, mainWinTitle) ' Call Robust_MainWin(id) ' Call MainLogic(id) ' End Sub' 程序入口 ' 黑格爾寫法,一切都在宇宙的邏輯之中,唯心主義 Call MainLogic(MainWin())' 一、主窗口 ' 主窗口總函數 Function MainWin() dim id, mainWinTitle, mainWinTipsCall Init_MainWin(mainWinTitle, mainWinTips)' 創建交互輸入框id = inputbox(mainWinTips, mainWinTitle)Call Robust_MainWin(id)MainWin = id End Function' (一)初始化主窗口提示內容 Sub Init_MainWin(mainWinTitle, mainWinTips)dim enterpriseName ,userName, userAdj, menAdj, womenAdjenterpriseName = "博瑞智(邯鄲)家庭教育服務中心"userName = "孫文"menAdj = "世界上最帥的"womenAdj = "世界上最漂亮的"userAdj = womenAdj' 主窗口標題mainWinTitle = enterpriseName & "-" & userName' 提示用語mainWinTips = vbCrLf & userAdj & userName & vbCrLf _+ vbCrLf + "請輸入要打開的文件夾編號吧!" End Sub' (二)主窗口健壯性處理 Sub Robust_MainWin(id)dim tipsWinTitle, tipsWinTips1, tipsWinTips2Call Init_Robust_MainWin(tipsWinTitle, tipsWinTips1, tipsWinTips2)' 1. 如果inputbox返回值為Empty,即用戶點擊的是“取消”;If IsEmpty(id) Then WScript.Quit End If' 2. 輸入框內容為空時直接點擊“確定”;If Len(id) = 0 Then msgbox tipsWinTips1, vbokcancel + vbInformation, tipsWinTitleWScript.QuitEnd If' 3. id有字符但為非純數字時If Not isnumeric(id) Thenmsgbox tipsWinTips2, vbokcancel + vbInformation, tipsWinTitleWScript.Quitend if End Sub' (三)初始化主窗口健壯性處理提示窗口內容 Sub Init_Robust_MainWin(tipsWinTitle, tipsWinTips1, tipsWinTips2)' 1. 初始化主窗口健壯性處理提示窗口標題tipsWinTitle = "來自候帥洲的溫馨提示"' 2. 初始化主窗口健壯性處理提示用語' (1)提示位置:一、(三)2.tipsWinTips1 = "您沒有輸入任何編號哦!!!" ' (2)提示位置:一、(三)3.tipsWinTips2 = "您的輸入不是純數字哦!!!" End Sub' 二、主邏輯 ' 主邏輯總函數 Sub MainLogic(id)dim strRootDir, idDirDictCall Init_MainLogic(strRootDir, idDirDict)Call Robust_MainLogic(id, idDirDict)' 1. 確定目錄存在后,拼接絕對目錄' (這里的確定的前提是,硬編碼的目錄結構映射是真實的。)dim strFinalDir, iFor i = 0 to Len(id) - 1strFinalDir = strFinalDir + "\" + idDirDict.Item(left(id, i + 1))Next' 2. 打開目標文件夾,結束Dim ObjWSSet ObjWS = WScript.CreateObject("wscript.shell")ObjWS.run strRootDir + strFinalDir End Sub' (一)初始化主邏輯內容 Sub Init_MainLogic(strRootDir, idDirDict)' 1、硬編碼目錄結構' (1)先硬編碼根目錄strRootDir = "E:\ID之道\工作"' (2)先硬編碼所有分目錄dim idDirArridDirArr = Array( _"1", "1、人事", _"2", "2、顧問", _"3", "3、個人", _"4", "4、待整理", __"11", "1、招聘", _"12", "2、培訓", _"13", "3、制度", _"14", "4、活動", __"111", "1、專業知識", _"112", "2、招聘簡章", _"113", "3、簡歷", _"114", "4、統計", _"115", "5、素材", _"116", "6、其他資料", __"120", "0、按類型分類匯總", _"121", "1、七天入職新員工培訓", _"122", "2、實習期", _"123", "3、其他機構" _)' (id為純數字時)' 2、目錄結構字典的初始化' 將目錄結構“id-目錄”放入鍵值對字典對象——idDirDictdim iSet idDirDict = WSH.CreateObject("Scripting.Dictionary")For i = 0 to UBound(idDirArr)idDirDict.Add idDirArr(i), idDirArr(i + 1)i = i + 1Next End Sub' (二)主邏輯健壯性處理 Sub Robust_MainLogic(id, idDirDict)dim tipsWinTitle, tipsWinTipsCall Init_Robust_MainLogic(tipsWinTitle, tipsWinTips)' 判斷指定的key是否存在If Not idDirDict.Exists(id) Thenmsgbox tipsWinTips, vbokcancel + vbInformation, tipsWinTitleWScript.QuitEnd If End Sub' (三)初始化主邏輯健壯性處理提示窗口內容 Sub Init_Robust_MainLogic(tipsWinTitle, tipsWinTips)' 1. 初始化主邏輯健壯性處理提示窗口標題tipsWinTitle = "來自候帥洲的溫馨提示"' 2. 初始化主邏輯健壯性處理提示用語tipsWinTips = "您的輸入的編號沒有對應的文件夾哦!!!" End Subv4.0 自動化獲取vbs文件所在文件夾目錄層次結構,代替了手動輸入文件夾名稱數組的硬編碼(我的同事正在使用這一個比較穩定的版本)
(漢字都抽離都了程序最前面,以便之后的封裝設置選項,大家改個漢字的描述就成了屬于自己的程序了)
' ' 候帥洲 ' ' 手機和微信:175 3102 3301 ' ' 此小項目CSDN詳解博客地址:https://blog.csdn.net/weixin_44591035/article/details/113667614 ' ' ' 1、需求分析 ' 一個盤里的文件名字開頭全有10以內數字編號開頭, ' 要求彈出窗口輸入一串數字編號,便可以打開指定文件夾。 ' ' ' 2、舉例 ' 彈出交互窗口輸入“122”,點擊確認, ' 即可打開文件夾地址為: ' “E:\工作\1、人事\2、培訓\2、實習期”。 ' 其中,后面的頓號和漢字是任意的, ' 只關注文件名前面的數字即可。 ' ' ' 3、目前進度 ' 第四個版本,v4 ' 面向對象形式改造,進一步的封裝變換 ' 加入自動查找抽離文件id并匹配 '' —————————————————————————————————————————————————————————————————— ' '···························!!!注意!!!!!! ' ' 目前算法編碼嚴格要求兩個準則: ' 1、每個文件夾數字編號必須是文件名稱的第一個字符并只能用一位阿拉伯數字表示 ' 2、每個文件夾數字編號與文件夾名的分割符號 ' 緊跟在數字后面且只有一個,且文件夾名稱只能含一個 ' (目前分隔符為頓號“、”,可改,但不推薦) ' ' ——————————————————————————————————————————————————————————————————dim variateValueArr variateValueArr = Array( _"博瑞智(邯鄲)家庭教育服務中心", _"孫文", _"世界上最漂亮的", _"請輸入要打開的文件夾編號吧!", __"來自候帥洲的溫馨提示", _"您沒有輸入任何編號哦!!!", _"您的輸入不是純數字哦!!!", _"您的輸入的編號沒有對應的文件夾哦!!!", _ _"、" _ ) dim variateIDArr variateIDArr = Array( __"111", _"112", _"113", _"114", __"211", _"212", _"213", _"221", _ _"121" _ ) dim variateDescribeArr variateDescribeArr = Array( _"enterpriseName", _"userName", _"userAdj", _"inpuIDTips", __"tipsWinTitle", _"tipsWinTips_ClickOKWhenBlank", _"tipsWinTips_ClickOKWhenNotPureNumber", _"tipsWinTips_IDNotReal", _ _"文件夾數字編號與文件夾名的分割符號" _ )' dim classifiedNumberArr ' classifiedNumberArr = Array(4, 4, 1)dim gttwMapping Set gttwMapping = New GTTW_Mapping gttwMapping.variateIDArr = variateIDArr gttwMapping.variateDescribeArr = variateDescribeArr gttwMapping.variateValueArr = variateValueArr gttwMapping.createMapping()' 程序入口 ' 黑格爾寫法,一切都在宇宙的邏輯之中,唯心主義 Call MainLogic(MainWin())' 一、主窗口 ' 主窗口總函數 Function MainWin() dim id, mainWinTitle, mainWinTipsCall Init_MainWin(mainWinTitle, mainWinTips)' 創建交互輸入框id = inputbox(mainWinTips, mainWinTitle)Call Robust_MainWin(id)MainWin = id End Function' (一)初始化主窗口提示內容 Sub Init_MainWin(mainWinTitle, mainWinTips) dim enterpriseName ' variateID = 111enterpriseName = gttwMapping.getVariateValue("111")dim userNameuserName = gttwMapping.getVariateValue("112")dim userAdjuserAdj = gttwMapping.getVariateValue("113")dim inputIDTipsinputIDTips = gttwMapping.getVariateValue("114")' 1. 主窗口標題mainWinTitle = enterpriseName & "-" & userName' 2. 提示用語mainWinTips = vbCrLf & userAdj & userName & vbCrLf _+ vbCrLf + inputIDTips End Sub' (二)主窗口健壯性處理 Sub Robust_MainWin(id)dim tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumberCall Init_Robust_MainWin(tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumber)' 1. 如果inputbox返回值為Empty,即用戶點擊的是“取消”;If IsEmpty(id) Then WScript.Quit End If' 2. 輸入框內容為空時直接點擊“確定”;If Len(id) = 0 Then ' msgbox tipsWinTips_ClickOKWhenBlank, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_ClickOKWhenBlank, tipsWinTitle)WScript.QuitEnd If' 3. id有字符但為非純數字時If Not isnumeric(id) Then' msgbox tipsWinTips_ClickOKWhenNotPureNumber, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_ClickOKWhenNotPureNumber, tipsWinTitle)WScript.Quitend if End Sub' (三)初始化主窗口健壯性處理提示窗口內容 Sub Init_Robust_MainWin(tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumber)' 1. 初始化主窗口健壯性處理提示窗口標題tipsWinTitle = gttwMapping.getVariateValue("211")' 2. 初始化主窗口健壯性處理提示用語' (1)提示位置:一、(三)2.tipsWinTips_ClickOKWhenBlank = gttwMapping.getVariateValue("212")' (2)提示位置:一、(三)3.tipsWinTips_ClickOKWhenNotPureNumber = gttwMapping.getVariateValue("213") End Sub' 二、主邏輯 ' 主邏輯總函數 '(id為純數字時) ' ' 思路: ' 例如目標文件夾為:str = “E:\工作\2、222\1、開發冷戰零撒扥\3、阿森簡單 - 副本” ' ' 解決: ' 直接從str中抽離“213”,然后與id直接比較,一樣則直接打開此文件夾' (一)定義相關變量和初始化并結束整個邏輯鏈sub MainLogic(id)Dim objFSO, objWS, currentDir, separatorStrSet objFSO = CreateObject("Scripting.FileSystemObject") Set objWS = WScript.CreateObject("wscript.shell")currentDir = objWS.CurrentDirectoryseparatorStr = gttwMapping.getVariateValue("121")Call SearchFolder(currentDir, objFSO, objWS, id, separatorStr)dim tipsWinTitletipsWinTitle = gttwMapping.getVariateValue("211")dim tipsWinTips_IDNotRealtipsWinTips_IDNotReal = gttwMapping.getVariateValue("221")' msgbox tipsWinTips_IDNotReal, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_IDNotReal, tipsWinTitle) end sub' (二)核心算法函數封裝 Sub SearchFolder(folderPath, objFSO, objWS, id, separatorStr) dim objFolderSet objFolder=objFSO.GetFolder(folderPath)Set SubFolders=objFolder.SubFoldersIf SubFolders.Count = 0 then'msgbox "exit search:" & folderPathexit SubEnd Ifdim strIDTemp, ss, n, str, index, strTempFor Each subFolder In SubFoldersstrIDTemp = subFolder.path ss = Split(strIDTemp, separatorStr, -1)n = UBound(ss) - 1str = ""For i = 0 to nstrTemp = ss(i)index = Len(strTemp)str = str & Mid(strTemp, index, 1)nextif StrComp(str, id) = 0 then' msgbox strIDTempCall openDir(strIDTemp, objWS)WScript.Quitend ifCall SearchFolder(subFolder.path, objFSO, objWS, id, separatorStr)Next End Sub' 提示窗口 Sub promptWin(tips, title)msgbox tips, vbokcancel + vbInformation, title End Sub' 打開文件夾,這里主要是解決了路徑帶空格報錯的問題 Sub openDir(dir, objWS)Const vbQuote = """"dir = vbQuote & dir & vbQuoteobjWS.run dir End Sub' GTTW制作的Mapping核心映射類 ' 以程序設計的標準化、規范化、流程化為中心思想 ' 最重要的是合適的抽象化 ' ' 此映射類給程序提供模板化設計思想 ' ' 此映射類主要功能: ' 映射所有與現實世界有關的變量 ' 讓程序設計依賴抽象,而不去依賴具體現實,符合依賴倒置原則 ' 并提供可視化設置的數據接口 ' ' 感覺完全可以存到數據庫呀! ' Class GTTW_Mapping' Key Value Dictionary Variate' IDValueDictVar' IVDV —> ivdv' (variateIDArr --> variateValueArr)' “ID-值”鍵值對字典映射變量Private m_ivdv' IDDescribeDictVar' IDDV —> iddv' (variateIDArr --> variateValueArr)' “ID-描述”鍵值對字典映射變量Private m_iddv Private m_variateIDArr ' 需要主體程序設計的形而上變量的id數組Private m_variateValueArr ' 需要從現實世界獲取的變量的值數組Private m_variateDescribeArr ' 需要主體程序設計的形而上變量的描述數組Private m_classifiedNumberArr ' 需要主體程序傳入的以上變量數組的分類分組數目數組' Initialize事件相當于構造函數Private Sub Class_Initialize ' 當這個類被創建時執行' MsgBox "類開始"Set m_ivdv = WSH.CreateObject("Scripting.Dictionary")Set m_iddv = WSH.CreateObject("Scripting.Dictionary")End SubPublic Default Function Constructor(variateIDArr, variateDescribeArr, classifiedNumberArr)m_variateIDArr = variateIDArrm_variateDescribeArr = variateDescribeArrm_classifiedNumberArr = classifiedNumberArr' Set Constructor = MeEnd Function' 只讀只寫方法Public Property Get ivdvivdv = m_ivdvEnd Property' 注意————私有的Private Property Let ivdv(new_ivdv)m_ivdv = new_ivdvEnd Property Public Property Get iddviddv = m_iddvEnd Property' 注意————私有的Private Property Let iddv(new_iddv)m_iddv = new_iddvEnd Property Public Property Get variateIDArrvariateIDArr = m_variateIDArrEnd Property Public Property Let variateIDArr(new_variateIDArr)m_variateIDArr = new_variateIDArrEnd Property Public Property Get variateValueArrvariateValueArr = m_variateValueArrEnd Property ' 注意————之后要改為私有的Public Property Let variateValueArr(new_variateValueArr)m_variateValueArr = new_variateValueArrEnd Property Public Property Get variateDescribeArrvariateDescribeArr = m_variateDescribeArrEnd Property Public Property Let variateDescribeArr(new_variateDescribeArr)m_variateDescribeArr = new_variateDescribeArrEnd Property Public Property Get classifiedNumberArrclassifiedNumberArr = m_classifiedNumberArrEnd Property Public Property Let classifiedNumberArr(new_classifiedNumberArr)m_classifiedNumberArr = new_classifiedNumberArrEnd Property ' 建立兩個映射Public Sub createMapping()dim i, nn = ubound(m_variateIDArr)For i = 0 to nm_ivdv.Add m_variateIDArr(i), m_variateValueArr(i)Next For i = 0 to nm_iddv.Add m_variateIDArr(i), m_variateDescribeArr(i)Next End Sub ' 以變量id得到相應變量在現實世界的值Public Function getVariateValue(variateID)getVariateValue = m_ivdv.Item(variateID)End Function' 以變量id得到相應變量在現實世界的描述Public Function getVariateDescribe(variateID)getVariateDescribe = m_iddv.Item(variateID)End Function End Classv4.1 在v4.0基礎上,增加了夸獎人的隨機形容詞功能
(不過,目前形容詞庫還是硬編碼)
' ' 候帥洲 ' ' 手機和微信:175 3102 3301 ' ' 此小項目CSDN詳解博客地址:https://blog.csdn.net/weixin_44591035/article/details/113667614 ' ' ' 1、需求分析 ' 一個盤里的文件名字開頭全有10以內數字編號開頭, ' 要求彈出窗口輸入一串數字編號,便可以打開指定文件夾。 ' ' ' 2、舉例 ' 彈出交互窗口輸入“122”,點擊確認, ' 即可打開文件夾地址為: ' “E:\工作\1、人事\2、培訓\2、實習期”。 ' 其中,后面的頓號和漢字是任意的, ' 只關注文件名前面的數字即可。 ' ' ' 3、目前進度 ' 第四個版本,v4 ' 面向對象形式改造,進一步的封裝變換 ' 加入自動查找抽離文件id并匹配 ' 增加了夸獎人的隨機形容詞功能 '' —————————————————————————————————————————————————————————————————— ' '···························!!!注意!!!!!! ' ' 目前算法編碼嚴格要求兩個準則: ' 1、每個文件夾數字編號必須是文件名稱的第一個字符并只能用一位阿拉伯數字表示 ' 2、每個文件夾數字編號與文件夾名的分割符號 ' 緊跟在數字后面且只有一個,且文件夾名稱只能含一個 ' (目前分隔符為頓號“、”,可改,但不推薦) ' ' ——————————————————————————————————————————————————————————————————dim variateValueArr variateValueArr = Array( _"博瑞智(邯鄲)家庭教育服務中心", _"孫文", _"請輸入要打開的文件夾編號吧!", __"來自候帥洲的溫馨提示", _"您沒有輸入任何編號哦!!!", _"您的輸入不是純數字哦!!!", _"您的輸入的編號沒有對應的文件夾哦!!!", _ _"、" _ ) dim variateIDArr variateIDArr = Array( __"111", _"112", _"114", __"211", _"212", _"213", _"221", _ _"121" _ ) dim variateDescribeArr variateDescribeArr = Array( _"enterpriseName", _"userName", _"inpuIDTips", __"tipsWinTitle", _"tipsWinTips_ClickOKWhenBlank", _"tipsWinTips_ClickOKWhenNotPureNumber", _"tipsWinTips_IDNotReal", _ _"文件夾數字編號與文件夾名的分割符號" _ )' dim classifiedNumberArr ' classifiedNumberArr = Array(4, 4, 1)dim gttwMapping Set gttwMapping = New GTTW_Mapping gttwMapping.variateIDArr = variateIDArr gttwMapping.variateDescribeArr = variateDescribeArr gttwMapping.variateValueArr = variateValueArr gttwMapping.createMapping()' 程序入口 ' 黑格爾寫法,一切都在宇宙的邏輯之中,唯心主義 Call MainLogic(MainWin())' 一、主窗口 ' 主窗口總函數 Function MainWin() dim id, mainWinTitle, mainWinTipsCall Init_MainWin(mainWinTitle, mainWinTips)' 創建交互輸入框id = inputbox(mainWinTips, mainWinTitle)Call Robust_MainWin(id)MainWin = id End Function' (一)初始化主窗口提示內容 Sub Init_MainWin(mainWinTitle, mainWinTips) dim enterpriseName ' variateID = 111enterpriseName = gttwMapping.getVariateValue("111")dim userNameuserName = gttwMapping.getVariateValue("112")dim userAdjuserAdj = praiseWords() + "的"dim inputIDTipsinputIDTips = gttwMapping.getVariateValue("114")' 1. 主窗口標題mainWinTitle = enterpriseName & "-" & userName' 2. 提示用語mainWinTips = vbCrLf & userAdj & userName & vbCrLf _+ vbCrLf + inputIDTips End Sub' (二)主窗口健壯性處理 Sub Robust_MainWin(id)dim tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumberCall Init_Robust_MainWin(tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumber)' 1. 如果inputbox返回值為Empty,即用戶點擊的是“取消”;If IsEmpty(id) Then WScript.Quit End If' 2. 輸入框內容為空時直接點擊“確定”;If Len(id) = 0 Then ' msgbox tipsWinTips_ClickOKWhenBlank, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_ClickOKWhenBlank, tipsWinTitle)WScript.QuitEnd If' 3. id有字符但為非純數字時If Not isnumeric(id) Then' msgbox tipsWinTips_ClickOKWhenNotPureNumber, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_ClickOKWhenNotPureNumber, tipsWinTitle)WScript.Quitend if End Sub' (三)初始化主窗口健壯性處理提示窗口內容 Sub Init_Robust_MainWin(tipsWinTitle, tipsWinTips_ClickOKWhenBlank, tipsWinTips_ClickOKWhenNotPureNumber)' 1. 初始化主窗口健壯性處理提示窗口標題tipsWinTitle = gttwMapping.getVariateValue("211")' 2. 初始化主窗口健壯性處理提示用語' (1)提示位置:一、(三)2.tipsWinTips_ClickOKWhenBlank = gttwMapping.getVariateValue("212")' (2)提示位置:一、(三)3.tipsWinTips_ClickOKWhenNotPureNumber = gttwMapping.getVariateValue("213") End Sub' 二、主邏輯 ' 主邏輯總函數 '(id為純數字時) ' ' 思路: ' 例如目標文件夾為:str = “E:\工作\2、222\1、開發冷戰零撒扥\3、阿森簡單 - 副本” ' ' 解決: ' 直接從str中抽離“213”,然后與id直接比較,一樣則直接打開此文件夾' (一)定義相關變量和初始化并結束整個邏輯鏈sub MainLogic(id)Dim objFSO, objWS, currentDir, separatorStrSet objFSO = CreateObject("Scripting.FileSystemObject") Set objWS = WScript.CreateObject("wscript.shell")currentDir = objWS.CurrentDirectoryseparatorStr = gttwMapping.getVariateValue("121")Call SearchFolder(currentDir, objFSO, objWS, id, separatorStr)dim tipsWinTitletipsWinTitle = gttwMapping.getVariateValue("211")dim tipsWinTips_IDNotRealtipsWinTips_IDNotReal = gttwMapping.getVariateValue("221")' msgbox tipsWinTips_IDNotReal, vbokcancel + vbInformation, tipsWinTitleCall promptWin(tipsWinTips_IDNotReal, tipsWinTitle) end sub' (二)核心算法函數封裝 Sub SearchFolder(folderPath, objFSO, objWS, id, separatorStr) dim objFolderSet objFolder=objFSO.GetFolder(folderPath)Set SubFolders=objFolder.SubFoldersIf SubFolders.Count = 0 then'msgbox "exit search:" & folderPathexit SubEnd Ifdim strIDTemp, ss, n, str, index, strTempFor Each subFolder In SubFoldersstrIDTemp = subFolder.path ss = Split(strIDTemp, separatorStr, -1)n = UBound(ss) - 1str = ""For i = 0 to nstrTemp = ss(i)index = Len(strTemp)str = str & Mid(strTemp, index, 1)nextif StrComp(str, id) = 0 then' msgbox strIDTempCall openDir(strIDTemp, objWS)WScript.Quitend ifCall SearchFolder(subFolder.path, objFSO, objWS, id, separatorStr)Next End Sub' 提示窗口 Sub promptWin(tips, title)msgbox tips, vbokcancel + vbInformation, title End Sub' 打開文件夾,這里主要是解決了路徑帶空格報錯的問題 Sub openDir(dir, objWS)Const vbQuote = """"dir = vbQuote & dir & vbQuoteobjWS.run dir End Sub' GTTW制作的Mapping核心映射類 ' 以程序設計的標準化、規范化、流程化為中心思想 ' 最重要的是合適的抽象化 ' ' 此映射類給程序提供模板化設計思想 ' ' 此映射類主要功能: ' 映射所有與現實世界有關的變量 ' 讓程序設計依賴抽象,而不去依賴具體現實,符合依賴倒置原則 ' 并提供可視化設置的數據接口 ' ' 感覺完全可以存到數據庫呀! ' Class GTTW_Mapping' Key Value Dictionary Variate' IDValueDictVar' IVDV —> ivdv' (variateIDArr --> variateValueArr)' “ID-值”鍵值對字典映射變量Private m_ivdv' IDDescribeDictVar' IDDV —> iddv' (variateIDArr --> variateValueArr)' “ID-描述”鍵值對字典映射變量Private m_iddv Private m_variateIDArr ' 需要主體程序設計的形而上變量的id數組Private m_variateValueArr ' 需要從現實世界獲取的變量的值數組Private m_variateDescribeArr ' 需要主體程序設計的形而上變量的描述數組Private m_classifiedNumberArr ' 需要主體程序傳入的以上變量數組的分類分組數目數組' Initialize事件相當于構造函數Private Sub Class_Initialize ' 當這個類被創建時執行' MsgBox "類開始"Set m_ivdv = WSH.CreateObject("Scripting.Dictionary")Set m_iddv = WSH.CreateObject("Scripting.Dictionary")End SubPublic Default Function Constructor(variateIDArr, variateDescribeArr, classifiedNumberArr)m_variateIDArr = variateIDArrm_variateDescribeArr = variateDescribeArrm_classifiedNumberArr = classifiedNumberArr' Set Constructor = MeEnd Function' 只讀只寫方法Public Property Get ivdvivdv = m_ivdvEnd Property' 注意————私有的Private Property Let ivdv(new_ivdv)m_ivdv = new_ivdvEnd Property Public Property Get iddviddv = m_iddvEnd Property' 注意————私有的Private Property Let iddv(new_iddv)m_iddv = new_iddvEnd Property Public Property Get variateIDArrvariateIDArr = m_variateIDArrEnd Property Public Property Let variateIDArr(new_variateIDArr)m_variateIDArr = new_variateIDArrEnd Property Public Property Get variateValueArrvariateValueArr = m_variateValueArrEnd Property ' 注意————之后要改為私有的Public Property Let variateValueArr(new_variateValueArr)m_variateValueArr = new_variateValueArrEnd Property Public Property Get variateDescribeArrvariateDescribeArr = m_variateDescribeArrEnd Property Public Property Let variateDescribeArr(new_variateDescribeArr)m_variateDescribeArr = new_variateDescribeArrEnd Property Public Property Get classifiedNumberArrclassifiedNumberArr = m_classifiedNumberArrEnd Property Public Property Let classifiedNumberArr(new_classifiedNumberArr)m_classifiedNumberArr = new_classifiedNumberArrEnd Property ' 建立兩個映射Public Sub createMapping()dim i, nn = ubound(m_variateIDArr)For i = 0 to nm_ivdv.Add m_variateIDArr(i), m_variateValueArr(i)Next For i = 0 to nm_iddv.Add m_variateIDArr(i), m_variateDescribeArr(i)Next End Sub ' 以變量id得到相應變量在現實世界的值Public Function getVariateValue(variateID)getVariateValue = m_ivdv.Item(variateID)End Function' 以變量id得到相應變量在現實世界的描述Public Function getVariateDescribe(variateID)getVariateDescribe = m_iddv.Item(variateID)End Function End ClassFunction praiseWords()dim strstr = "獨立 大方 愛美 善于交際 另類 有耐力 溫柔 體貼 有見識 有儀態 撒嬌 任性 美麗 善良 大方 優雅 文靜 " & _"活潑 率直 可愛 天真 端莊 溫柔 賢惠 多才 俊俏 國色天香 傾國傾城 美艷絕世 清麗絕俗 天生麗質 開朗 賢淑 純潔 " & _"回眸一笑百媚生 沉魚落雁 閉月羞花 貌賽西施 風華絕代 儀態萬端 婉風流轉 美撼凡塵 聘婷秀雅 娥娜翩躚 俏麗多姿 " & _"風姿卓越 顧盼流轉 清絲糾纏 舉步輕搖 明艷不可方物 閉月羞花 沉魚落雁 傾國傾城 溫婉嫻淑 千嬌百媚 儀態萬千 " & _ "美若天仙 美愈天人 不施粉黛天然美 清秀高雅 姿容絕代 玉指如蔥 膚如凝脂 眉如新月 秋波流轉 櫻桃小口 美人微笑轉星眸 " & _"國色天香 花容月貌 明目皓齒 淡掃峨眉 清艷脫俗 香肌玉膚 艷冠群芳 剪水雙瞳 美艷絕倫 神仙玉骨 楚楚動人 脫俗 " & _"如花似玉 傾國傾城 靜若處子 動若脫兔 螓首蛾眉 淡妝濃抹 雙瞳剪水 貌美如花 姿容絕代 玉指如蔥 膚如凝脂 清秀高雅 " & _"絕代佳人 仙姿佚貌 冰肌玉骨 眉目如畫 環肥燕瘦 眉清目秀 千嬌百媚 梨花帶雨 清艷脫俗 妖嬈動人 艷光四射 淡掃峨眉 " & _"儀態萬端 婉風流轉 美撼凡塵 聘婷秀雅 嬌小玲瓏 小家碧玉 粉裝玉琢 夭桃秾李 美如冠玉 紅飛翠舞 齒白唇紅 綽約多姿 " & _"美若天仙 美愈天人 貌賽西施 美艷絕世 娥娜翩躚 俏麗多姿 艷冠群芳 剪水雙瞳 秋波流轉 櫻桃小口 空谷幽蘭 眉如新月 " & _"清麗脫俗 花容月貌 明眸皓齒 天生麗質 亭亭玉立 如花似玉 花枝招展 出水芙蓉 宛轉蛾眉 靡顏膩理 粉妝玉琢 月里嫦娥 " & _"國色天姿 玉貌花容 秀外惠中 仙姿玉貌 美艷絕倫 神仙玉骨 楚楚動人 顧盼流轉 唇紅齒白 風情萬眾 顧盼生姿 明眸善睞 " & _"齒如編貝 目若朗星 明眸皓齒 恍若天人 沉魚落雁 傾國傾城 國色天香 閉月羞花"dim strArrstrArr = split(str, " ")n = UBound(strArr)ran = GetRandomInt(1, n)praiseWords = strArr(ran) End FunctionFunction GetRandomInt(m,n)dim ranran = Second(Now) * 3While ran > n Or ran < mIf ran > n Thenran = ran - day(Now)End IfIf ran < m Thenran = ran + Second(Now)End IfWendGetRandomInt = ran End Functionv5.0 增加了自動獲取并顯示文件夾名稱結構層次的顯示功能
(但問題是,1,顯示窗口是獨立的,多了一步,麻煩了。2,如果文件夾太多,顯示不全,此情況待解決。
應該上工程了。
)
總結
以上是生活随笔為你收集整理的【VBS】超级实用小实例:仅用数字编号打开任意指定文件夹(超超超级全面指南)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 单元格拆分及合并,表格合并和拆
- 下一篇: 服务器ibm3650性能,IBM Sys