iT邦幫忙

0

VBScript 從選定資料夾並從內抓出特定副檔名的檔案

  • 分享至 

  • xImage

下列程式是小弟從google上拼湊出來的。目的是選定資料夾後,並將裡面的檔案丟入For Each中執行。
現在是想從中指定"特定副檔名"的檔案(比如說".txt")或是"一段字串加副檔名"(比如說"*setup_1.txt")。並丟入For Each中執行。
請問該如何加入及修改?謝謝。

Dim objFolder, objShell
SelectFolder = vbNull
Set objShell = CreateObject( "Shell.Application" )
Set objFolder = objShell.BrowseForFolder( 0, "Select Folder", 0, "D:\Script_temp" )
If IsObject( objfolder ) Then SelectFolder = objFolder.Self.Path
Set objFolder = Nothing
Set objshell = Nothing
'----------------------------------------------------------------
Dim objFso, objGetFolder, intCount, strFileName, gdsPath
gdsPath = SelectFolder & ""
intCount = 0
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objGetFolder = objFso.GetFolder(gdsPath)

'想從中指定"特定副檔名"的檔案(比如說".txt")或是"一段字串加副檔名"(比如說"setup_1.txt")

For Each strFile in objGetFolder.Files
intCount = intCount + 1
strFileName = gdsPath & strFile.Name '返回全路徑+資料夾內檔案名
pareFolderName = objFso.GetParentFolderName(gdspath) 'strFile.Name 返回父資料夾
baseName = objFso.GetBaseName(strFileName) ' baseName 返回檔案名不含副檔名
exteName = objFso.GetExtensionName(strFileName) ' baseName 返回副檔名

Next

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
deh
iT邦研究生 1 級 ‧ 2023-03-04 21:31:02
Dim objFolder, objShell
SelectFolder = vbNull
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Select Folder", 0, "D:\Script_temp")
If IsObject(objFolder) Then SelectFolder = objFolder.Self.Path
Set objFolder = Nothing
Set objShell = Nothing

'----------------------------------------------------------------

Dim objFso, objGetFolder, intCount, strFileName, gdsPath
gdsPath = SelectFolder & ""
intCount = 0
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objGetFolder = objFso.GetFolder(gdsPath)

'加入特定副檔名或是一段字串加副檔名

Dim strFilter
strFilter = "*.txt" '指定副檔名為 .txt 的檔案,若要指定字串加副檔名可改為 "*setup_1.txt"

For Each strFile In objGetFolder.Files
    If objFso.GetExtensionName(strFile.Name) = "txt" Then '判斷副檔名是否為 txt
    'If InStr(objFso.GetFileName(strFile.Name), "setup_1.txt") > 0 Then '判斷檔名是否符合指定字串加副檔名
        intCount = intCount + 1
        strFileName = gdsPath & strFile.Name '返回全路徑+資料夾內檔案名
        pareFolderName = objFso.GetParentFolderName(gdsPath) 'strFile.Name 返回父資料夾
        baseName = objFso.GetBaseName(strFileName) ' baseName 返回檔案名不含副檔名
        exteName = objFso.GetExtensionName(strFileName) ' baseName 返回副檔名
    End If
Next

看更多先前的回應...收起先前的回應...
jacky33 iT邦新手 5 級 ‧ 2023-03-05 22:24:34 檢舉

謝謝您的回覆。
測試過後,第一個If沒有問題,但是第二個If有出現以下error:

Script macro error: Script Error (Code 800a0023) in file: D:/Script_temp/AAA/4.vbs
Description: 沒有定義這個 Sub 或 Function
Line(24): " If objFso.GetFileName(strFile.Name) Like strFilter Then '?斗瑼??臬蝚血???摮葡?瑼?"
Cause: Microsoft VBScript 執行階段錯誤

jacky33 iT邦新手 5 級 ‧ 2023-03-06 10:21:07 檢舉

抱歉。我的副檔案名不一定都是".txt"文字檔。會是其他商用軟體,比如說"*.aedt"或是"*setup_1.aedt"。會不會是因為這個的關係??
謝謝。

deh iT邦研究生 1 級 ‧ 2023-03-06 10:40:12 檢舉

已更新,請再試試

jacky33 iT邦新手 5 級 ‧ 2023-03-07 20:14:36 檢舉

謝謝回覆。
如果我想再加一個判斷條件,TEST_setup_1.txt檔名文件要存在並且
TEST_AAA.txt不能存在。可以使用And嗎?如下
謝謝。

If InStr(objFso.GetFileName(strFile.Name), "setup_1.txt") > 0 And InStr(objFso.GetFileName(strFile.Name), "AAA.txt") = 0 Then '判斷檔名是否符合指定字串加副檔名

deh iT邦研究生 1 級 ‧ 2023-03-08 21:58:55 檢舉
For Each strFile In objGetFolder.Files
    If objFso.GetExtensionName(strFile.Name) = "txt" Then '判斷副檔名是否為 txt
        If InStr(objFso.GetFileName(strFile.Name), "setup_1.txt") > 0 And InStr(objFso.GetFileName(strFile.Name), "TEST_AAA.txt") = 0 Then '判斷檔名是否符合指定字串加副檔名,且不含TEST_AAA.txt
            intCount = intCount + 1
            strFileName = gdsPath & strFile.Name '返回全路徑+資料夾內檔案名
            pareFolderName = objFso.GetParentFolderName(gdsPath) 'strFile.Name 返回父資料夾
            baseName = objFso.GetBaseName(strFileName) ' baseName 返回檔案名不含副檔名
            exteName = objFso.GetExtensionName(strFileName) ' baseName 返回副檔名
        End If
    End If
Next
jacky33 iT邦新手 5 級 ‧ 2023-03-09 10:30:56 檢舉

原來如此。非常感謝。

我要發表回答

立即登入回答