windows環境下全盤搜尋特定檔案
阿新 • • 發佈:2019-01-29
如果你想讓程式碼不消失,那就讓他自由,讓他存在很多FTP伺服器上。–linus
想法很簡單,動機很齷齪,假如你手裡有一臺同學的電腦,你突然想知道這臺電腦裡有沒有小電影,那麼該怎麼辦,
很簡單,給我3s執行以下指令碼就ok,程式碼如下:
set fso = createobject("scripting.filesystemobject")
dim l_content
dim sum_folder '資料夾數量
dim sum_file '檔案數量
sum_file = 0
sum_folder = 1
set disk = fso.Drives '獲取所有的碟符,遍歷查詢
for each d in disk
l_content = l_content & getfoldername(d, sum_folder, sum_file)
next
set fp = fso.createtextfile("C:\Users\Administrator\Desktop\find_file.txt") '列印到檔案中,路徑隨意改
fp.write l_content
fp.close
function getfoldername(path, sum_folder, sum_file)
set l_folder = fso.getfolder(path)
set l_file = l_folder.Files
for each file in l_file
if LCase(right(file, 5)) = ".rmvb" then '判斷格式是否符合,當然這裡可以隨便改
getfoldername = getfoldername & path & "\" & file.name & vbCrlf
sum_file = sum_file + 1
end if
next
set l_subfolder = l_folder.subfolders
for each folder in l_subfolder
if folder.name <> "System Volume Information" then '這裡的判斷是為了避開沒有許可權的資料夾,避免出現“許可權不足“的錯誤”
path = folder '注意folder是資料夾路徑,而不是名字
sum_folder = sum_folder + 1
getfoldername = getfoldername & getfoldername(path, sum_folder, sum_file)
end if
next
end function
程式碼編寫過程中,幾點小問題總結一下:
*fso.Drives:是獲取碟符的意思,通常來說是C:,D:,E:,F:
*sum_file:通過這個變數記錄搜尋到的檔案的數量。但是VBS的全域性變數和C語言的並不一樣,需要傳入函式才能改變其具體值。
在子函式內部直接使用並不能改變值。sum-folder同理
*子函式的兩個迴圈中,file變數就是檔案的名字,而folder是資料夾的路徑
*`if folder.name <> "System Volume Information" then`
`for each file in l_file` 這條語句會報錯,指令碼停止執行,於是把這個資料夾遮蔽掉。
*msgbox:這個彈框只能列印1024個位元組,因此更多的內容會被擷取。
*子函式getfoldername中的變數getfoldername是為了使這個函式具有返回值,不可替換為其他變數。
*以此指令碼修改,可以做許多其他功能。