当文件名包含四个或更少的字符时,如何使用命令行复制文件?

当文件名包含四个或更少的字符时,如何使用命令行复制文件?

尝试将文件名中字符不超过四个且具有特定扩展名的文件复制到新文件夹。我尝试这样做了几个小时!越来越沮丧。我使用了复制命令和通配符?和*

答案1

正如 AFH 在评论中指出的那样,简单的“COPY ????.ext”将适用于四个文件名或更少字符。在基于 DOS 的系统中,在 glob 样式的模式匹配中,* 表示“0 个或更多字符”,显然 ? 表示零个或一个字符。但是,请务必了解这种类型的模式匹配是在应用程序级别完成的 - 也就是说,Windows(以及 DOS)将命令行完全按照键入的内容传递给要运行的程序。如果您键入“????.ext”,那正是 COPY 命令所看到的。

与我使用过的其他 shell 相比,例如 un*x(bash、tcsh 等),命令解释器首先扩展所有模式匹配,然后将完整文件列表传递给命令。也就是说,在这些 shell 中,如果您输入“copy file.?”,shell 会调用“copy file.1 file.2 file.3”,而“copy”通常不会看到文字“file.?”参数。

(这就是为什么我最初的第一个答案是错误的——我用一个命令测试了它不是扩展 Windows CMD.EXE 的方式。只是要注意一些事情!)

在普通的 Windows 控制台/命令行中(不是顺便说一下,在 Windows 中,? 和 * 的工作方式是:? 匹配单个字符,而 * 匹配尽可能多的字符。两者都不允许您指定计数。但是,使用批处理文件按顺序运行每个命令,您可以实现相同的效果:

@echo off
copy "????.ext" "target folder"
copy "???.ext" "target folder"
copy "??.ext" "target folder"
copy "?.ext" "target folder"

使用各种批处理文件技术,您还可以修改它以适用于其他文件名长度,或使用不同的目标文件夹等等。

此外,在现代 Windows 操作系统中,您很可能通过 Windows Script Host 使用 VBScript,而在 Win8 中,您应该拥有 PowerShell,这两者都允许更广泛的编程逻辑,例如强大的正则表达式等。

相关内容