浏览旧硬盘时,我偶然发现了一个名为 * 的文件夹:
我无法从 Windows 打开、访问或重命名它。
我尝试通过 Moba Xterm 访问它,在那里我得到了
ls -l
ls: ./*: No such file or directory
cp \* star
cp: can't stat '*': No such file or directory
它损坏了吗?有办法修复吗?
答案1
*
是 Windows 文件名中不允许使用的字符之一(因为 Windows 上的文件系统会进行通配符扩展)。但是,NTFS 上通常允许使用通配符,因此存在这样的目录并不表示文件系统损坏,而只是表示目录是使用不同的操作系统创建的。
尝试使用\\?\
Cmd 中的 NT 路径重命名它:
move \\?\E:\██████████████\* \\?\E:\██████████████\badfolder
(在这种情况下特别使用“move”而不是“ren(ame)”,因为后者对 * 字符有自己的特殊处理。)
如果这没有帮助,请将磁盘连接到运行 Linux 的系统,或尝试通过 WSL 访问它。甚至 WSL1 也可能有效,因为它绕过了所有高级 Windows API。
(例如,MobaXterm 或 git-bash 中的 Linux 工具的 Windows 移植版不会有太大帮助,因为它们仍然是普通的视窗程序最终会崩溃,并且仍然受到相同的限制。另一方面,WSL1 和旧的 Interix/SfU 工具是与 Win32 完全不同的“子系统”,仅共享内核,但不受文件名限制的影响。)
答案2
虽然听起来你最终通过使用 WSL 解决了这个问题,但我认为你可以在不安装 WSL/Cygwin 的情况下通过使用8.3 简称文件夹。
要从资源管理器中获取cmd
当前目录中的提示符,可以使用文件菜单中的“打开 Windows Powershell”选项,然后输入cmd
要切换到的 shell cmd.exe
。
运行dir /x
列出当前目录的上下文并获取名为 的文件夹的短名称*
,然后通过其短名称引用该文件夹以对其进行ren
命名。
我使用 WSL 在我的 Windows 文件系统上创建了一个以该名称命名的文件夹*
,然后按照上述步骤确定其与 DOS 兼容的短名称(21BA~1
在本例中),然后star
使用以下命令重命名它cmd.exe
:
PS C:\Users\Nick\Scripts> cmd
Microsoft Windows [Version 10...]
(c) Microsoft Corporation. All rights reserved.
C:\Users\Nick\Scripts>dir /x
Volume in drive C has no label.
Volume Serial Number is ABCD-1234
Directory of C:\Users\Nick\Scripts
03/11/2022 05:26 PM <DIR> .
03/11/2022 05:26 PM <DIR> ..
10/10/2020 04:30 PM 1,225 PORT-F~1.PS1 port-forward.ps1
03/11/2022 05:26 PM <DIR> 21BA~1
1 File(s) 1,225 bytes
3 Dir(s) 166,006,308,864 bytes free
C:\Users\Nick\Scripts>ren 21BA~1 star
C:\Users\Nick\Scripts>dir
Volume in drive C has no label.
Volume Serial Number is ABCD-1234
Directory of C:\Users\Nick\Scripts
03/11/2022 05:40 PM <DIR> .
03/11/2022 05:40 PM <DIR> ..
10/10/2020 04:30 PM 1,225 port-forward.ps1
03/11/2022 05:26 PM <DIR> star
1 File(s) 1,225 bytes
3 Dir(s) 166,006,243,328 bytes free
答案3
fwiw 一个简单的解决方案是安装赛格威并用它重命名文件夹。假设你的文件夹路径是C:\Users\hans\Desktop\*
,打开 Cygwin 终端并写入
cd 'C:\Users\hans\Desktop'
mv '*' 'star'
瞧,你的文件夹现在名为 star,而不是*