借助PowerShell 5.1
和新的.NET framework
,最终可以使用Get-ChildItem -Path "\\?\C:\MyPath"
处理长路径名。
在下面的代码中,我们尝试过滤掉特定目录(以及目录本身)中的文件和文件夹,因为我们对它们不感兴趣。
此代码可以正常工作,但是我们想知道是否有更好或更快的方法来代替构建长的正则表达式字符串?
如果数组$IgnoredFolders
真的很长,则-notmatch
可能需要花费更多时间才能做出决定。我不是正则表达式的专家,他们可能会变成多久,所以欢迎您提供任何反馈意见。
<#
# Path
Folder A
File folder A.txt
Folder B
File folder B.txt
Folder C
File folder C.txt
File root A.txt
File root B.txt
#>
$Path = 'S:\testFolder'
$IgnoredFolders = @(
"$Path\Folder B"
"$Path\Folder C"
)
$RegexIgnoredFolders = $IgnoredFolders.ForEach({
[Regex]::Escape("\\?\$_")
}) -join '|'
@(Get-ChildItem -LiteralPath "\\?\$Path" -Recurse).Where({
$_.FullName -notmatch $RegexIgnoredFolders
}) | select fullname
此代码的输出是:
"$Path\Folder A"
"$Path\File root A.txt"
"$Path\File root B.txt"
"$Path\Folder A\File folder A.txt"