移除幽灵文件和文件夹
前言
在 Windows 中,有一些顽固的文件或文件夹,它们显示为 0 字节大小,但是使用 SFC、RMDIR、DEL,等命令,在 PE、RE、安全模式、强力粉碎、其他系统下也无法删除
此时可以使用 8.3 命名规则来移除文件或文件夹(也称为短文件名,常用于早期 DOS 与 Windows NT 之前版本的 Windows,在 FAT 文件系统中的常用方法)
仅字符长度大于 8 字符才会有短文件名显示
所有的操作都需要管理员身份,执行前请二选一执行以下操作:
- 按下 WIN + X 以打开“高级菜单”,选择“终端管理员”,“Windows PowerShell (管理员)”或“命令提示符(管理员)”
- 按下 WIN + Q 或 WIN + S 以打开“Windows 搜索”,输入
wt.exe(终端)、cmd.exe(命令提示符)或powershell.exe(Windows PowerShell),选择最佳匹配结果并点击“以管理员身份运行”
启用 8.3 命名规则
如果已开启,请直接转到移除文件或文件夹章节
仅对新文件生效,无论启用还是禁用,这个设置都只影响更改之后新建的文件。已存在的文件不会因此自动获得或失去短文件名
若需要对已存在的文件或文件夹设置短文件名,请参阅附录《手动设置短文件名》
注册表方式
此方式需要重启 Windows
为所有卷启用:
1 | rege.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /t REG_DWORD /d 0 /f |
为所有卷禁用:
1 | rege.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /t REG_DWORD /d 1 /f |
按卷单独设置(需要搭配 fsutil):
1 | rege.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /t REG_DWORD /d 2 /f |
仅为系统盘启用:
1 | rege.exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /t REG_DWORD /d 3 /f |
fsutil
查询状态
1 | fsutil 8dot3name query |
为所有卷启用:
1 | fsutil behavior set disable8dot3 0 |
为所有卷禁用:
1 | fsutil behavior set disable8dot3 1 |
为 C 盘启用:
1 | fsutil.exe 8dot3name set C: 0 |
为 C 盘禁用:
1 | fsutil.exe 8dot3name set C: 1 |
移除文件或文件夹
首先,使用 cd 命令切换到该文件夹的上层目录(文件则为文件所在目录)
例如,我的文件夹为 D:\Temp\1\ATestFolderName,里面有 ATestTXTFileName.TXT
对于文件夹:
1 | cd /d "D:\Temp\1" |
对于文件:
1 | cd /d "D:\Temp\1\ATestFolderName" |
随后,使用 dir /x 命令查看文件和文件夹的短文件名
文件

文件夹

可以看到,D:\Temp\1\ATestFolderName 文件夹短文件名为 ATESTF~1,ATestTXTFileName.TXT 短文件名为 ATESTT~1
最后,使用 rmdir(文件夹)或 del(文件)以移除
对于文件夹,使用 /s 递归删除,/q 静默删除:
1 | rmdir /s /q ATESTF~1 |

对于文件,使用 /f 强制删除,/q 静默删除:
1 | del /f /q ATESTT~1 |

附录
手动设置短文件名
名称唯一性:你指定的短文件名在同一个文件夹内必须是唯一的,不能与其他文件或文件夹的短文件名冲突
1 | fsutil file setshortname "<文件或文件夹完整路径>" <短文件名> |
例如
1 | fsutil file setshortname "D:\Temp\ABCDEFGHIJKLMNOPQRSTUVWXYZ" A2Z |