Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要比较VBS(.regex)中的文件夹路径_Regex_Vbscript_String Comparison - Fatal编程技术网

需要比较VBS(.regex)中的文件夹路径

需要比较VBS(.regex)中的文件夹路径,regex,vbscript,string-comparison,Regex,Vbscript,String Comparison,问题是: 我需要比较VBS中的FOLDER1path和FOLDER2path字符串 FOLDER1我从文本文件中读取,它保存得更早文件夹2-从“选择文件夹”对话框。 我想阻止用户选择FOLDER2if: FOLDER2=FOLDER1 FOLDER2=FOLDER1\some_文件夹 FOLDER2=父文件夹\FOLDER1 例如: Folder1=c:\users\user\Documents 然后Folder2不能是:c:\users\user\Documents,c:\users\user

问题是: 我需要比较VBS中的
FOLDER1
path和
FOLDER2
path字符串

FOLDER1
我从文本文件中读取,它保存得更早<代码>文件夹2-从“选择文件夹”对话框。 我想阻止用户选择
FOLDER2
if:
FOLDER2=FOLDER1
FOLDER2=FOLDER1\some_文件夹
FOLDER2=父文件夹\FOLDER1

例如:
Folder1=c:\users\user\Documents
然后
Folder2
不能是:
c:\users\user\Documents
c:\users\user\Documents\Letters
c:\users\user\

无法生成要比较的正确正则表达式。现在使用以下代码,但需要正常的解决方案

    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

如果不能是以下任何一种:
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
如果您不希望用户输入的任何部分与Folder1相同,则可以颠倒
InStr
检查的顺序


如果您需要比这更具体,您可能必须将文件夹字符串拆分为数组(按“\”拆分),然后比较数组中的前x个字段。

我将假设只应排除直接父文件夹和子文件夹(例如,
FOLDER1\foo
是禁止的,但
FOLDER1\foo\bar
是允许的). 如果这一假设是正确的,那么这样的假设应该是可行的:

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
Set fso=CreateObject(“Scripting.FileSystemObject”)
Set app=CreateObject(“Shell.Application”)
dir1=LCase(fso.GetAbsolutePathName(“C:\Users\user”))
parent1=fso.GetParentFolderName(dir1)
做
设置fldr=app.BrowseForFolder(0,“选择文件夹:”,&H10&,dir1)
如果fldr为Nothing,则退出“用户按下[取消]
dir2=LCase(fldr.Self.Path)
parent2=fso.GetParentFolderName(dir2)
循环直到dir1 dir2和parent1 dir2和dir1 parent2
请注意,使用用于
BrowseForFolder
的参数,用户只能选择
dir1
下方的文件夹,除非他在输入字段中键入其他路径