我的文件服务器上有一堆目录,这些目录太长了:大概有2,000个目录和20,000多个字符。
有很多使用Robocopy(带有清除或mir)的文章和策略来摆脱它们-没有一个起作用。
我正在将PowerShell与Windows API一起使用,以递归方式获取路径的最深部分并删除内容(使用相关功能的“宽”版本)。
所以我正在执行的过程是:
我遇到的问题是,由于某些原因,Kernel32 RemoveDirectory()函数的运行速度似乎非常慢。
我是在做错什么吗,还是由于目录深度太慢或有人可以帮助解决问题?
Add-Type -TypeDefinition $filesearcher
$delete = @'
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool RemoveDirectory(string path);
'@
Add-Type -MemberDefinition $delete -Name 'Kernel32'
#[Reflection.Assembly]::LoadWithPartialName('System.Collections.Generic')
$f = @()
$d = @()
$d1 = "\\?\C:\temp\temp"
if (([FileSearcher]::FindNextFilePInvokeRecursiveParalleled($d1, [ref]$f, [ref]$d)))
{
for ($i=($d.Count-1); $i -gt 0; $i--) {
"$($d.Count - ($d.Count - $i))/$($d.Count)"
if (![Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes.Kernel32]::RemoveDirectory($d[$i].FullName)) {
break
}
}
}
我如何创建极其深的目录作为测试用例:
mkdir 'C:\temp2'
$p = 'C:\temp'
0..5000 | % { $p += '\temp' }
.\Robocopy.exe c:\temp2 $p /MIR /E