删除断开的链接

时间:2014-02-15 21:33:31

标签: powershell hyperlink

我需要删除文件夹的所有内容,其中可能包含断开链接等。文件夹路径由变量提供。问题是PowerShell无法删除损坏的链接。

$folderPath = "C:\folder\"

尝试1:

Remove-Item -Force -Recurse -Path $folderPath

失败并显示错误:

Remove-Item : Could not find a part of the path 'C:\folder\brokenLink'.
At line:1 char:1
+ Remove-Item -Force -Recurse -Path $folderPath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\folder\brokenLink:String) [Remove-Item], DirectoryNot 
   FoundException
    + FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

尝试2:

Start-Job { cmd /c rmdir $folderPath }

失败,因为$folderPath按原样而不是其值传递:

Start-Job { cmd /c rmdir $folderPath } | select command

Command                                                                                             
-------                                                                                             
 cmd /c rmdir $folderPath                                                                           

除了使用.NET框架之外还有任何建议吗?

修改
通过断开的链接,我指的是一个指向先前安装的分区的文件夹,它不再存在。该文件夹仍然可用,但在尝试导航时,会发生此错误,因为目标不再存在:
错误:

  

C:\ folder \ brokenLink指的是不可用的位置。它   可以在这台计算机上的硬盘上,也可以在网络上。检查   确保磁盘已正确插入或您正确插入   连接到Internet或您的网络,然后再试一次。如果它   仍然无法定位,信息可能已被移动到   不同的位置。

1 个答案:

答案 0 :(得分:2)

这将有效:

$folderPath = "C:\folderContaingBrokenSymlinks\";
$items = ls $folderPath -Recurse -ea 0;
foreach($item in $items){
    if($item.Attributes.ToString().contains("ReparsePoint")){
        cmd /c rmdir $item.PSPath.replace("Microsoft.PowerShell.Core\FileSystem::","");
    }
    else{
        rm -Force -Recurse $item;
    }
}