2011-01-21 3 views
0

여러 하위 디렉터리가있는 디렉터리가 있습니다.디렉터리를 통해 반복하고 부모 디렉터리를 기반으로 파일 이름의 이름을 바꾸거나 추가하십시오.

MAIN_DIR

각 서브 디렉토리는 "프로젝트 이름"이다

\ 예컨대

MAIN_DIR \ BOBEVANS324

MAIN_DIR \ BILLJOHNSON3는

각 "프로젝트"폴더는 서브 DIRS의 무리가 포함되어 있습니다. 폴더 구조를 보지 않고도 이름이 모두 들어있는 ".abc"파일을 찾고 있다고 가정 해 봅시다. 예를 들어,

MAIN_DIR \ BOBEVANS234는 \ 3904902490.abc

\ 당신은 디렉토리 트리의 컨텍스트 외부에서 어떤 의미가 없다 "3904902490.abc"볼 수 SUBDIR으로. 파일 이름을 복사 한 후 파일 이름에 디렉토리 이름을 추가하여 이름을 바꾸고 싶습니다.

그래서 MAIN_DIR의 모든 하위 폴더를 살펴보고 ".abc"파일을 찾으려고합니다. 하나를 찾으면 dest 디렉토리로 복사하고 "BOBEVANS234_SUBDIR_3904902490.abc"와 같은 이름으로 바꿉니다.

답변

0

당신의 FileSystemObject에서 특히 Folder Object을보고 싶어하고 SubFoldersName (새로운 이름을 만들 수 있습니다) 속성과 File Object 그리고 그것은이 Move Method (같은 디렉토리에 다른 이름으로 파일을 이동하면, 기억의 , 이름 바꾸기와 같은 효과가 있습니다).

이름을 바꿀 파일을 찾으려면 불행히도 손으로 찾아야합니다.하지만 MS KB 기사 (VB6 용이지만 VBScript와 매우 비슷 함)에서 볼 수있는 것처럼 비교적 쉽습니다. HOW TO: Recursively Search Directories by Using FileSystemObject

0

여기 난 내 스크립트에 사용하는 내 재귀 함수이다, 당신은 당신이 recursex이 같이 Recurse 기능에 의해 사용되는 RecurseX NOT 같이 Recurse, 를 사용해야합니다뿐만 아니라

참고 를 사용할 수 있습니다.

참고 : 많은 하위 디렉터리가있는 경우 재귀에 다소 시간이 걸릴 수 있습니다.

같이 Recurse 함수는 ARRAY 모든 폴더와 매주 하위 폴더를 포함하는 반환합니다.

Dim I, SubDirectories 

SubDirectories=Recurse ("MAIN_DIR") 

For I=0 To UBound (SubDirectories) 

WScript.Echo SubDirectories (I) 

Next 

'########################################## '# # '# Function # '# # '# Recurse Function # '# by Ronnie Matthews # '########################################## '# # '# This will return an array of all # '# Folders and subfolders (every levels) # '# in a directory provided. # '# # '##########################################

Function Recurse (dir) 

    Dim FSO 
    Set FSO = CreateObject("Scripting.Filesystemobject") 


    If Not FSO.FolderExists (dir) Then 

     Recurse=Array (Empty) 
     Exit Function 
    End If 

    Dim RecArr, RecArrID 
    RecArr=Array (dir) 
    RecArrID=1 
    Recurse=RecurseX (dir,RecArr,RecArrID) 
    RecArr=Empty 
    RecArrID=Empty 



End Function 

'DO NOT CALL THIS FUNCTION DIRECTLY. ONLY RECURSE 
Function RecurseX (Dir,RecArr,RecArrID) 



    Dim F,FSO 

    Set FSO = CreateObject("Scripting.Filesystemobject") 

    For Each F In FSO.GetFolder (dir).SubFolders 
     ReDim Preserve RecArr (RecArrID) 
     RecArr (RecArrID)=F.Path 
     RecArrID=RecArrID+1 
     If F.SubFolders.Count>=1 Then 


      RecurseX=RecurseX (F.Path,RecArr,RecArrID) 

     End If 

    Next 

    RecurseX=RecArr 

End Function 

예 :

관련 문제