来自icacl的StdOut文件夹路径中的重音字符导致问题

时间:2014-06-13 20:17:16

标签: regex vbscript stdout wsh icacls

我正在编写一个vbscript来整理各种Windows文件共享的权限,并遇到了一个我还没有克服的问题。

这部分脚本首先运行一个基本的icacls来拉回路径的当前权限(从读取文本文件获得(是unicode,是的,我有TriStateTrue设置),可以是文件夹或文件(我稍后会在剧本中处理这个问题。)

strFolderPath = chr(34) & strFolderPathRaw & chr(34)

Set icacls = oshell.Exec("icacls " & strFolderPath)
Do While icacls.Status = 0
 WScript.Sleep 100
Loop

'Process through permissions for Folder Path
Do Until icacls.StdOut.AtEndOfStream
strPermission = icacls.StdOut.ReadLine
etc.

现在,如果你运行icacls,你会知道第一行包含你刚给它的路径,然后是第一个ACL条目,下面的条目只是它们自己但是缩进了空格以匹配路径的长度,例如

D:\Folder\Folder\File.doc NT AUTHORITY\SYSTEM:(F)
                          DOMAIN\Domain Admins:(F)

D:\Folder\Folder\Folder\File.doc NT AUTHORITY\SYSTEM:(F)
                                 DOMAIN\Domain Admins:(F)

所以我使用了一些正则表达式替换首先删除了路径,并将所有双空格切除到一个空格,并忽略字符串中的第一个字符(这是一个空格),因为我不能只是删除所有空格,因为“Domain Admins”中有空格。

strPermission = Replace(strPermission,strFolderPathRaw, "")

objRegEx.Pattern = "[ ]{2,}"
strPermission = objRegEx.Replace(strPermission, " ")

objRegEx.Pattern = "^.{1}([^\n\r:]+:+.+)$"
strPermission = objRegEx.Replace(strPermission, "$1")

我觉得很聪明......直到一些海外股票破坏了我的计划,并且文件夹名称如下: TelegrammfürX

当我检查StdOut时,我看到它反而: Telegramm f?r X

因此没有匹配,没有替换/删除,诅咒。经过许多小时的谷歌搜索和试用错误,我还没有解决这个问题。有没有其他人遇到这个并得到一个有效的解决方案/修复?谢谢。

0 个答案:

没有答案