下列程式是小弟從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
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
謝謝您的回覆。
測試過後,第一個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 執行階段錯誤
抱歉。我的副檔案名不一定都是".txt"文字檔。會是其他商用軟體,比如說"*.aedt"或是"*setup_1.aedt"。會不會是因為這個的關係??
謝謝。
已更新,請再試試
謝謝回覆。
如果我想再加一個判斷條件,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 '判斷檔名是否符合指定字串加副檔名
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
原來如此。非常感謝。