我正在尝试在 Windows 命令 shell 中列出文件名由 8 个字符后跟句点和文件扩展名组成的文件目录。我使用的通配符模式是“????????.TIF”。这将返回所有带有“.TIF”扩展名的文件名,而不管文件名的扩展名前部分的长度。示例:
目录 A*.TIF
返回 ABCDEFGH.TIF 和 ABCDEFGHIJ.TIF
目录???????.TIF
还返回两个文件。我预计只会返回第一个文件,因为它是两个文件中唯一一个与模式匹配的文件(8 个单个字符后跟“.TIF”)。这种行为的解释是什么?
提前感谢任何回复。
答案1
我认为问题ABCDEFGHIJ.TIF
是简称类似于ABCDEF~1.TIF
并且 的东西正在与您的模式相匹配。
如果您使用,DIR /X
您将看到所有文件的短名称 - 即 8.3 文件名。
您可以尝试这样的事情:
DIR /B | FINDSTR /R /I "^........\.TIF"
这将使用正则表达式模式中的 FINDSTR 来确保 之前正好有 8 个字符.TIF
。有关 FINDSTR 的更多帮助,请FINDSTR /?
在命令行中输入。
答案2
如果要纠正此问题,请打开提升的命令提示符并输入:
fsutil 8dot3name set 1
现有文件仍会出现此问题,除非您删除短文件名。您复制/创建的新文件不会出现此问题。如果您需要批量删除短文件名,可以使用:
fsutil 8dot3name strip /s <directory>
该问题似乎源于 Windows 7 使用短文件名作为通配符而不是长文件名。
答案3
?
表示匹配任意单身的字符。通过执行 a,dir ????????.TIF
您表示返回任何具有 8 个字符和.tif
扩展名的文件,而dir A*.tif
表示返回任何以A
或 'a' 开头并具有.tif
扩展名的文件