2015-04-17 84 views
2

我使用前缀(即ABCD *)复制文件列表以匹配批处理脚本中的文件。然而,看起来匹配的一些文件正在被抛在后面,而其他不匹配的文件正在被抓取。Windows短名称与长名称不匹配

我跑了DIR/X和发现,对于文件的一把短名称不符合他们的LONGNAME:

4/17/2015 02:04 PM 554 ABCDEF~1.TXT  abcdefghijklmnopqrs.txt 
4/17/2015 02:08 PM 123 ABCDEF~2.TXT  1234567890.txt 
4/17/2015 03:18 PM 233 987654~1.TXT  abcdefg123456.txt 

任何想法,为什么这样的事情会发生,以及如何解决它?

+0

希望澄清一下,上面的数据只是一个例子。这些文件来自外部源,然后根据文件名的前4个字符移动到特定的目录中。这样做的脚本将没有机会重命名文件的短名称。如果脚本只能使用长名称(而不是长名称和短名称),那将是理想的。 – R3dChief

+0

请在你的问题中编辑一个真实的例子,并揭示你真正想要做什么。 'copy ABCD *'匹配长名或短名;在你构建的人造范例中,第一个和第三个将被复制,但第二个,'abcd *'与任何名称都不匹配。 – Magoo

+0

在我的有限测试中,'DIR'和'COPY'匹配长文件名和8.3名称的通配符。因此,在上面的示例数据中,对于'ABCD *',所有三个文件都将被复制。 – aphoria

回答

2

更改短文件名,你可以指定ABCDEFG*来解决此问题。

编辑

由于上述建议是不是一种选择,你可以使用FSUTIL删除所有的8.3名。

该命令将分析当前目录(.)中的文件并显示更改而不实际制作它们。

fsutil 8dot3name strip /t . 

删除/t参数以实际删除8.3名称。

您还可以运行:

fsutil 8dot3name strip 

看到所有的选项。

+0

这是我的情况的最佳选择,因为该条可以在移动之前执行。谢谢。 – R3dChief

1

长短文件名不需要匹配。默认算法在“NTFS如何生成简短文件名”中记录为here。您还可以找到它在wikipedia

如果你的样本数据代表实际的文件,您可以用

fsutil file setshortname longFileName shortFileName