我使用 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
*
是 Windows 文件名中不允许使用的字符之一(因为通配符扩展是由 Windows 上的文件系统完成的)。但是,通常在 NTFS 上是允许的,因此拥有这样的目录并不表示文件系统损坏,只是该目录是使用不同的操作系统创建的。尝试使用
\\?\
Cmd 中的 NT 路径重命名它:(在这种情况下,请特别使用 'move' 而不是 'ren(ame)',因为后者对 * 字符有自己的特殊处理。)
如果这样做没有帮助,请将磁盘连接到运行 Linux 的系统,或尝试通过 WSL 访问它。甚至 WSL1 也可以工作,因为它绕过了所有高级 Windows API。
(您在例如 MobaXterm 或 git-bash 中找到的 Linux 工具的 Windows 端口并没有太大帮助,因为它们最终仍然是普通的Windows程序,并且仍然受到相同的限制。另一方面,WSL1并且旧的 Interix/SfU 工具是与 Win32 完全不同的“子系统”,只共享内核,但不受文件名限制的影响。)
虽然听起来您最终通过使用 WSL 解决了这个问题,但我认为您可以在不安装 WSL/Cygwin 的情况下使用文件夹的8.3 短名称来处理这个问题。
要从
cmd
资源管理器中获取当前目录的提示,您可以使用“文件”菜单中的“打开 Windows Powershell”选项,然后键入cmd
shell 以切换到cmd.exe
.运行
dir /x
以列出当前目录的上下文并获取名为 的文件*
夹的短名称,然后通过其短名称引用该文件夹以将其命名ren
。我使用 WSL 在我的 Windows 文件系统上创建了一个文件夹
*
,然后按照上述步骤确定其与 DOS 兼容的短名称(21BA~1
在本例中),然后star
使用以下命令重命名cmd.exe
:fwiw 一个简单的解决方案是安装Cygwin并用它重命名文件夹。假设您的文件夹路径是
C:\Users\hans\Desktop\*
,打开 Cygwin 终端并写入瞧,您的文件夹现在被命名为 star 而不是
*