2013-10-06 1 views
0

질문 : FOLDER1 경로와 FOLDER2 경로 문자열을 VBS에서 비교해야합니다.VBS (.regex)에서 폴더 경로를 비교해야합니다.

FOLDER1 텍스트 파일에서 읽었습니다. 이전에 저장되었습니다. FOLDER2 - 폴더 선택 대화 상자에서. 내가 FOLDER2 경우 선택하는 사용자를 방지하려면 : c:\users\user\Documents, c:\users\user\Documents\Letters 또는

c:\users\user\ 잘 정규식 비교할 수 없습니다 : 예를 들어
FOLDER2 = FOLDER1 FOLDER2 = FOLDER1\some_folder FOLDER2 = Parent_Folder\FOLDER1

: Folder1 = c:\users\user\Documents 다음 Folder2가 될 수 없습니다. 지금 다음 코드를 사용하지만 정상적인 솔루션이 필요합니다.

RightPath = 0 
    Do 

    Set objShell = CreateObject("Shell.Application") 
    Set objFolder = objShell.BrowseForFolder(0, "Select folder:", &H10&, strPath) 

     If objFolder Is Nothing Then 
     msgbox "Configuration canceled" ,64 , "Information" 
     Wscript.Quit 
    End If 

    Set objFolderItem = objFolder.Self 
    objPath = objFolderItem.Path 

    ' Right now, Check for users folder only 
    RightPath = RightPath + 1 
    Dim re, targetString 
    Set re = New RegExp 
    With re 
     .Pattern = "Desktop|Documents|Downloads|Music|Pictures|Videos" 
     .Global = False 
     .IgnoreCase = True 
    End With 

    targetString = objPath 
    If re.Test(targetString) Then 
     msgbox "You cannot choose:" & vbCrLf & vbCrLf & _ 
     "Desktop, Documents, Downloads, Music, Pictures or Videos" & vbCrLf & vbCrLf & _ 
    "Please select another location" ,48 , "Warning!" 
     RightPath = 0 
    End If 

    Loop Until RightPath > 0 

    msgbox "You selected "+targetString ,0 , "Information," 
    Wscript.Quit 

답변

0

는 다음 중 하나 일 수없는 경우 c:\users\user\Documents, c:\users\user\Documents\Letters 또는 c:\users\user\ 다음 Instr 처음 두에 도움이 될 수 있습니다. 예를 들어

,

Folder1 = "c:\users\user\Documents" 
Folder2 = "c:\users\user\Documents\Letters" 
If InStr(Folder2,Folder1) Then FAIL 

당신은 폴더 1은 당신이 InStr 검사의 순서를 반대로 수와 동일하게 사용자 입력의 어떤 부분을하지 않은 경우.

이보다 더 구체적으로해야하는 경우 폴더 문자열을 배열 ("\"로 분리)로 나눈 다음 배열의 첫 x x 숫자 필드를 비교해야 할 수 있습니다.

+0

예. 고맙습니다. InStr이 작동합니다. – MVKozyrev

0

직접 부모 및 하위 폴더 만 제외해야한다고 가정합니다 (예 : FOLDER1\foo은 금지되어 있지만, FOLDER1\foo\bar은 허용됩니다). 그 가정이 맞다면,이 같은 작동합니다 : 당신이 BrowseForFolder에 사용하는 매개 변수를 사용하여 사용자는 입력 필드에 dir1 아래 그 종류를 제외하고 다른 경로를 폴더를 선택 할 수있을 것으로

Set fso = CreateObject("Scripting.FileSystemObject") 
Set app = CreateObject("Shell.Application") 

dir1 = LCase(fso.GetAbsolutePathName("C:\Users\user")) 
parent1 = fso.GetParentFolderName(dir1) 

Do 
    Set fldr = app.BrowseForFolder(0, "Select folder:", &H10&, dir1) 
    If fldr Is Nothing Then Exit Do 'user pressed [Cancel] 

    dir2 = LCase(fldr.Self.Path) 
    parent2 = fso.GetParentFolderName(dir2) 
Loop Until dir1 <> dir2 And parent1 <> dir2 And dir1 <> parent2 

주 .

관련 문제