본문 바로가기
카테고리 없음

튜닝코드

by 팁텍북 2024. 7. 5.

하위 폴더명에도 "특정 문자열"이 포함된 것만 탐색하도록 수정하여 탐색 시간을 단축할 수 있습니다. 이를 위해 하위 폴더를 탐색하기 전에 폴더명에 검색 문자열이 포함되어 있는지 확인하는 조건을 추가하면 됩니다.

아래는 해당 기능을 반영한 코드입니다:

```vba
Sub CopyFilesContainingString(sourceFolder As String, targetFolder As String, searchString As String)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 대상 폴더가 존재하지 않으면 생성
    If Not fso.FolderExists(targetFolder) Then fso.CreateFolder(targetFolder)
    
    ' 폴더 탐색 및 파일 복사
    SearchAndCopyFiles fso.GetFolder(sourceFolder), searchString, targetFolder, fso
    
    MsgBox "파일 복사가 완료되었습니다!"
End Sub

Sub SearchAndCopyFiles(folder As Object, searchString As String, targetFolder As String, fso As Object)
    Dim file As Object, subFolder As Object
    
    ' 현재 폴더의 파일 탐색 및 복사
    For Each file In folder.Files
        If InStr(file.Name, searchString) > 0 Then file.Copy fso.BuildPath(targetFolder, file.Name), True
    Next
    
    ' 하위 폴더 탐색 (재귀 호출)
    For Each subFolder In folder.SubFolders
        ' 하위 폴더명이 검색 문자열을 포함하는 경우에만 탐색
        If InStr(subFolder.Name, searchString) > 0 Then
            SearchAndCopyFiles subFolder, searchString, targetFolder, fso
        End If
    Next
End Sub

Sub ExecuteCopy()
    ' 초기 설정
    CopyFilesContainingString "C:\abc", "C:\bbc", "특정 문자열" ' 여기에 찾고자 하는 문자열을 입력하세요
End Sub
```

이 코드에서는 `SearchAndCopyFiles` 서브루틴 내에서 하위 폴더를 탐색하기 전에 폴더명이 `searchString`을 포함하고 있는지 확인합니다. 만약 포함하고 있다면 해당 하위 폴더에 대해서만 재귀적으로 탐색을 진행하게 됩니다. 이로 인해 불필요한 폴더 탐색을 줄여 탐색 시간을 단축할 수 있습니다.

뤼튼 사용하러 가기 > https://agent.wrtn.ai/0ek99d
Sub CopyFilesContainingString(sourceFolder As String, targetFolder As String, searchString As String)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 대상 폴더가 존재하지 않으면 생성
    If Not fso.FolderExists(targetFolder) Then fso.CreateFolder(targetFolder)
    
    ' 폴더 탐색 및 파일 복사
    SearchAndCopyFiles fso.GetFolder(sourceFolder), searchString, targetFolder, fso
    
    MsgBox "파일 복사가 완료되었습니다!"
End Sub

Sub SearchAndCopyFiles(folder As Object, searchString As String, targetFolder As String, fso As Object)
    Dim file As Object, subFolder As Object
    
    ' 현재 폴더의 파일 탐색 및 복사
    For Each file In folder.Files
        If InStr(file.Name, searchString) > 0 Then file.Copy fso.BuildPath(targetFolder, file.Name), True
    Next
    
    ' 하위 폴더 탐색 (재귀 호출)
    For Each subFolder In folder.SubFolders
        ' 하위 폴더명이 검색 문자열을 포함하는 경우에만 탐색
        If InStr(subFolder.Name, searchString) > 0 Then
            SearchAndCopyFiles subFolder, searchString, targetFolder, fso
        End If
    Next
End Sub

Sub ExecuteCopy()
    ' 초기 설정
    CopyFilesContainingString "C:\abc", "C:\bbc", "특정 문자열" ' 여기에 찾고자 하는 문자열을 입력하세요
End Sub

댓글