我被难住了。我有一个叫c:/data/ToDelete
的文件夹。它曾经包含文件和一个名为...
的子文件夹,其中包含相同的文件和一个子文件夹...
,这让人恶心。
我把ToDelete文件夹的内容移到了其他地方,但子文件夹/子文件夹结构仍然存在,我无法摆脱它。
这就是它在资源管理器中的样子This PC > Data > ToDelete > ... > ... > ... > ... > etc
点击上面显示的路径:C:DataToDelete
我能够重命名第一个文件夹(从c:\/data/temp/到c:\/data/ToDelete/(,但每当我试图重命名子文件夹时;此文件夹已打开";(可能是因为它只是指回它的父文件夹(。
我试过的东西(都没用(
- 基础:Delete键,Shift Delete,拖动到回收站,发送到回收站
- 命令提示符下删除,包括尝试
.
的ASCII代码以防万一 - 我试着用7号拉链拉
- 我做了一个chkdsk,没有错误
- 我尝试使用Revo Uninstaller Pro(删除文件夹选项(进行删除
- 我试着用这个在网上找到的powershell脚本重命名子文件夹,以为可以删除它们,但出现了一个错误:
Get-ChildItem -Recurse | where {$_.attributes -eq "Directory"} | Where-Object {$_.Name -match '...'} | Rename-Item -NewName { $_.Name -replace '...' , 'ToDelete' }
有趣的是,我在备份目录中也找到了这个文件夹,所以不知怎么的,整个文件夹都可以被复制(这意味着我现在必须在多个地方删除它(。
您需要做两件事才能使PowerShell处理名为...
:的文件或文件夹
- 尽可能使用
-LiteralPath
而不是-Path
参数,以阻止PowerShell解析路径 - 将
\?
前置到完整路径,以告知底层Windows API禁用所有字符串解析,并将其后面的字符串直接发送到文件系统
示例:
# For demonstration, create two nested sub folders literally named '...'
New-Item -ItemType Directory -Path '\?c:dataToDelete......'
# Rename all '...' sub folders to 'ToDelete'
Get-ChildItem -LiteralPath '\?c:dataToDelete' -Directory -Recurse -Filter '...' |
Sort-Object { $_.Fullname.Length } -Desc |
Rename-Item -NewName ToDelete
- 在重命名文件夹之前,我们必须按路径长度(降序(排序,以确保首先重命名嵌套最深的文件夹。否则,
Get-ChildItem
枚举的路径在重命名第一个文件夹后将不正确
对于您尝试过的内容:
- 注意,
-match '...'
找不到像"&";。-match
运算符的RHS操作数是正则表达式模式,因此将匹配字符串中任意三个字符的第一个序列。CCD_ 14也是如此。要字面上匹配"&";,在RegEx模式中使用时,使用-eq '...'
或像这样转义点:...