无法使用Remove-Item -Recurse -Force以递归方式删除某些文件

时间:2018-01-01 19:30:17

标签: windows powershell recursion

在powershell 5.1上 在foreach循环中使用它,例如:

foreach ($i in $folder.subfolders) {
   if( $i.path -like "*node_modules" ){
      Remove-Item $i.path -Force -Recurse
   }
}

我一直遇到这个特殊的错误:

    + CategoryInfo          : WriteError: (_node_modules_r...dationpath.html:FileInfo) [Remove-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand
Remove-Item : Cannot remove item C:\topDir\js\node_modules\ram
l-1-parser\documentation\interfaces\_node_modules_raml_definition_system_node_modules_raml_typesystem_dist_src_index_d_.numbertype.html:
Could not find a part of the path '_node_modules_raml_definition_system_node_modules_raml_typesystem_dist_src_index_d_.numbertype.html'.
At C:\topDir\re.ps1:12 char:11
+           Remove-Item $i.path -Force -Recurse

导致错误的文件全部存在,我已经检查了路径,就我的眼睛所知,它们是否正确?
我唯一能说的是文件名异常长。但肯定不能成为这个原因吗?

1 个答案:

答案 0 :(得分:0)

长UNC名称删除有问题。这是一个特定于操作系统的东西,限制是260个字符。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

在Windows 10上,您可以启用长路径名,但这并不适用于所有情况。在某些情况下,您必须使用短名称,这需要一些转换工作。

与Beacon Bits'同样重要的事情。 state,因为没有.subfolder属性或方法。你可以通过......来看到这一点。

(gci D:\ Temp)| Get-Member |选择名称,MemberType

如果您在父文件夹或子文件夹中的文件之后,则使用...

FullName                        Property

像...一样的东西。

(gci 'D:\Temp\*.txt' -Recurse).FullName

Results

D:\Temp\diff\TestFile_2.txt
...
D:\Temp\Duplicates\BeforeRename1\FsConfig.txt
...
D:\Temp\Duplicates\dup5\SomeRandomThing.txt
...