名为“*”的文件夹

par*_*kos 21 windows ntfs

浏览旧硬盘驱动器时,我发现了这个名为 * 的文件夹:

星星

我无法从 Windows 打开、访问或重命名它。

窗口错误

我尝试通过 Moba Xterm 访问它,我得到

ls -l
ls: ./*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
cp \* star
cp: can't stat '*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

它是否已损坏?有什么办法可以解决吗?

use*_*686 41

*是 Windows 文件名中不允许的字符之一(因为通配符扩展是由 Windows 上的文件系统完成的)。然而,一般来说,NTFS 上允许这样做,因此拥有这样的目录并不表示文件系统损坏,只是表明该目录是使用不同的操作系统创建的。

\n

尝试使用\\\\?\\Cmd 中的 NT 路径重命名它:

\n
move \\\\?\\E:\\\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\\* \\\\?\\E:\\\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\\badfolder\n
Run Code Online (Sandbox Code Playgroud)\n

(在这种情况下,具体使用“move”而不是“ren(ame)”,因为后者对 * 字符有自己的特殊处理。)

\n

如果这没有帮助,请将磁盘连接到运行 Linux 的系统,或尝试通过 WSL 访问它。即使 WSL1 也可能起作用,因为它绕过了所有高级 Windows API。

\n

(您在 MobaXterm 或 git-bash 中找到的 Linux 工具的 Windows 端口不会有太大帮助,因为它们仍然是普通的Windows程序,并且仍然受到相同的限制。另一方面,WSL1而旧的Interix/SfU工具是与Win32完全不同的“子系统”,仅共享内核,但不受文件名限制的影响。)

\n

  • 移动命令似乎不起作用。通过 Linux 操作系统访问它就成功了。非常感谢你的协助! (9认同)
  • 我猜想从 Cygwin 中的 shell 进行命令也可能有效。 (2认同)
  • @CarlWitthoft:Cygwin 程序最终仍然只是 Windows 程序,在 WinAPI 之上实现 POSIX API,除非我弄错了。与 WSL1 不同,它没有内核支持,这就是为什么它对 fork() 等系统调用的模拟如此昂贵。这个答案已经解释了通过 WinAPI *不起作用*。 (2认同)
  • 无需使用其他操作系统,[WinApi 的 NtCreateFile](https://docs.microsoft.com/en-us/windows/win32/api/winternl/nf-winternl-ntcreatefile) 会忽略特定的 Windows 限制并允许您创建名为“*”的文件/文件夹(为什么?不知道..) (2认同)

Dao*_*Wen 7

虽然听起来您最终通过使用 WSL 解决了这个问题,但我认为您可以通过使用文件夹的8.3 短名称来处理这个问题,而无需安装 WSL/Cygwin。

\n

要从资源管理器获取cmd当前目录中的提示,可以使用“文件”菜单中的“打开 Windows Powershell”选项,然后cmd在 shell 中键入以切换到cmd.exe.

\n

打开 Windows PowerShell

\n

运行dir /x以列出当前目录的上下文并获取名为 的文件夹的短名称*,然后通过其短名称引用该文件夹来ren命名它。

\n

我使用 WSL 创建一个*在 Windows 文件系统上命名的文件夹,然后按照上述步骤确定其 DOS 兼容的短名称(21BA~1在本例中),然后star使用以下命令重命名它cmd.exe

\n
PS C:\\Users\\Nick\\Scripts> cmd\nMicrosoft Windows [Version 10...]\n(c) Microsoft Corporation. All rights reserved.\n\nC:\\Users\\Nick\\Scripts>dir /x\n Volume in drive C has no label.\n Volume Serial Number is ABCD-1234\n\n Directory of C:\\Users\\Nick\\Scripts\n\n03/11/2022  05:26 PM    <DIR>                       .\n03/11/2022  05:26 PM    <DIR>                       ..\n10/10/2020  04:30 PM             1,225 PORT-F~1.PS1 port-forward.ps1\n03/11/2022  05:26 PM    <DIR>          21BA~1       \xef\x80\xaa\n               1 File(s)          1,225 bytes\n               3 Dir(s)  166,006,308,864 bytes free\n\nC:\\Users\\Nick\\Scripts>ren 21BA~1 star\n\nC:\\Users\\Nick\\Scripts>dir\n Volume in drive C has no label.\n Volume Serial Number is ABCD-1234\n\n Directory of C:\\Users\\Nick\\Scripts\n\n03/11/2022  05:40 PM    <DIR>          .\n03/11/2022  05:40 PM    <DIR>          ..\n10/10/2020  04:30 PM             1,225 port-forward.ps1\n03/11/2022  05:26 PM    <DIR>          star\n               1 File(s)          1,225 bytes\n               3 Dir(s)  166,006,243,328 bytes free\n
Run Code Online (Sandbox Code Playgroud)\n