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

问题描述 投票:1回答:1

在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

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

windows powershell recursion
1个回答
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'所说的一样,因为没有.subfolder属性或方法。你可以通过做...

(gci D:\ Temp)| Get-Member |选择Name,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
...
© www.soinside.com 2019 - 2024. All rights reserved.