文件名非法的文件

文件名非法的文件

可能重复:
如何强制 Windows XP 重命名具有特殊字符的文件?

我有几个文件的名称中包含 Windows 禁止使用的字符,例如“?”和“:”。我不确定它们是如何使用这些名称到达那里的,因为我无法手动创建使用这些名称的文件。它们是从 HFS 驱动器恢复的,但恢复它们的工具是在 Windows 下运行的,因此我认为在创建它们时应该受到相同的限制。

无论如何……现在它们在这里,我可以打开它们,但我不能移动、复制、重命名或删除它们。我想删除其中的一些,但大多数我想保存并复制到另一个驱动器。我该怎么做?

答案1

您无法删除 NTFS 文件系统卷上的文件或文件夹

原因 5:文件名包含 Win32 命名空间中的保留名称 如果文件名包含 Win32 命名空间中的保留名称(例如“lpt1”),则可能无法删除该文件。要解决此问题,请使用非 Win32 程序重命名该文件。您可以使用 POSIX 工具或任何其他使用适当内部语法的工具来使用该文件。

此外,如果您使用特定语法指定文件路径,则可能能够使用一些内置命令绕过典型的 Win32 保留名称检查。例如,如果您在 Windows XP 中使用 Del 命令,则可以删除名为“lpt1”的文件,前提是您使用以下特殊语法指定文件的完整路径:

del \\?\c:\path_to_file\lpt1

有关在 Windows NT 和 Windows 2000 下删除具有保留名称的文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

120716如何在 Windows 中删除具有保留名称的文件

有关在 Windows XP 下删除具有保留名称的文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

315226如何在 Windows XP 中删除具有保留名称的文件

如果使用典型的 Win32 CreateFile 机制打开文件句柄,则某些文件名将为旧式 DOS 设备保留。为了向后兼容,不允许使用这些文件名,并且不能使用典型的 Win32 文件调用来创建它们。但是,此问题不是 NTFS 的限制。

您可以使用 Win32 程序绕过创建(或删除)文件时执行的典型名称检查,方法是使用与遍历深度超过 MAX_PATH 的文件夹相同的技术。此外,某些 POSIX 工具不受这些名称检查的约束。

原因 6:文件名包含 Win32 命名空间中的无效名称 如果文件名包含无效名称(例如,文件名结尾有空格或句点,或者文件名仅由空格组成),则可能无法删除文件。要解决此问题,请使用使用适当内部语法的工具来删除文件。您可以使用某些工具中的“\?\”语法来操作这些文件,例如:

del "\\?\c:\path_to_file_that contains a trailing space.txt "

此问题的原因与原因 4 类似。但是,如果您使用典型的 Win32 语法打开名称中包含尾随空格或尾随句点的文件,则在打开实际文件之前会删除尾随空格或句点。因此,如果同一文件夹中有两个文件,分别名为“AFile.txt”和“AFile.txt”(请注意文件名后面的空格),如果您尝试使用标准 Win32 调用打开第二个文件,则会打开第一个文件。同样,如果您有一个文件名仅为“”(空格字符)的文件,并且您尝试使用标准 Win32 调用打开它,则会打开该文件的父文件夹。在这种情况下,如果您尝试更改这些文件的安全设置,则可能无法执行此操作,或者您可能会意外更改不同文件上的设置。如果出现此行为,您可能会认为您有权访问实际上具有限制性 ACL 的文件。

答案2

我的答案类似的问题

故障安全方法

启动 Linux LiveCD。Ubuntu 具有良好的 NTFS 支持,并且 Linux 比 Windows 能够处理更多文件名中的奇怪字符。perl 重命名脚本可以作为系统rename命令包含在内,这对于批量修改许多同名文件非常方便。


在 Windows 命令 Shell 中使用短文件名

DOS 命令 DIR/X 显示短文件名,如果它们存在于您的系统中

$ cmd
c:\test> dir /x
 Volume in drive E is NUVOL
 Volume Serial Number is 80D3-A96D

 Directory of e:\tor\test

10/04/2009  05:15 AM    <DIR>                       .
10/04/2009  05:15 AM    <DIR>                       ..
10/04/2009  05:11 AM                 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov
               1 File(s)              0 bytes
               2 Dir(s)   5,201,670,144 bytes free

如果它们确实存在,REN 命令会将它们移动到新名称;新名称可以是新的(有效的)长文件名。

c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"

这就是修复方法。

要批量处理所有这些文件,您需要 1) 获取要移动的所有文件的短文件名;2) 使用适当的 REN 命令将列表转换为批处理文件;3) 运行生成的批处理脚本。如果您熟悉 perl(或 sed/awk、python 等),您可以自己编写脚本,也可以根据您在步骤 1 中创建的列表手动编写脚本。

但是如果 DIR/X 不显示短文件名,则表示您的系统已禁用它们,并且此解决方案无济于事。

答案3

如果 Idigas 的建议不起作用,你可以随时使用 Linux LiveCD 移动它们,例如Ubuntu。它允许文件名中使用问号和冒号,因此处理文件应该没有问题。

您只需要先安装驱动器。如果 XP 是磁盘上安装的唯一操作系统,则可能可以从 SCSI 驱动器或 IDE 驱动器安装,/dev/sda1或者/dev/hda1取决于它是 SCSI 驱动器还是 IDE 驱动器。

安装 SCSI 驱动器(如果运行 NTFS):

挂载-t ntfs-3g /dev/sda1 /mnt

安装 IDE 驱动器(运行 NTFS):

挂载-t ntfs-3f /dev/hda1 /mnt

如果是 FAT32 卷,则可以使用 vfat 作为类型 ( -t vfat)

答案4

我用过 WindowsUnix 服务删除过去的这些文件。

之所以能够创建此类文件,是因为 Windows 支持 POSIX,因此 NTFS 被设计为能够支持 POSIX 文件系统的所有功能。但是,使用常规 Windows API 的普通 Win32/Win64 程序无法访问这些功能。您需要使用编写为本机 API 或 POSIX api 的程序来创建或删除此类文件。

相关内容