需要比较VBS(.regex)中的文件夹路径
问题是: 我需要比较VBS中的需要比较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
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
下方的文件夹,除非他在输入字段中键入其他路径