![DOS 移动特定的 .xml 文件扩展名](https://linux22.com/image/1572122/DOS%20%E7%A7%BB%E5%8A%A8%E7%89%B9%E5%AE%9A%E7%9A%84%20.xml%20%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D.png)
我想将 .xml 文件从一个目录(我们称之为“from”)移动到另一个目录(我们称之为“to”),但使用通配符会移动不需要的文件,例如 .xml_。如何在移动它们时明确指定“.xml”扩展名?
答案1
正如@Scott 的链接所讨论的,*.xml
匹配*.xml_
,因为 8.3 名称以.XML
(use dir /x
to show) 结尾。
幸运的是,档案命令不受此怪癖的影响,因此您可以使用:
forfiles /m *.xml /c "cmd /c move @path TargetDir\"
笔记:
- 因为
move
是内部命令,cmd
所以需要单独的 来调用它(使用外部命令(例如 )则不需要xcopy
,如forfiles /m *.xml /c "xcopy @path TargetDir\"
)。 有一个
/s
选项,它将通过子目录进行递归,但不会递归目标目录:如果您希望源树在目标处匹配,您将需要解析源路径以找到正确的目标目录,这可能是最好在批处理文件中完成:forfiles /m *.xml /c "cmd /c call mover.cmd @relpath TargetDir\"
如果您需要
mover.cmd
,我会将其作为脚本练习留给您编写。- 我还没有测试过当文件或目录名称中有空格时会发生什么,但我预计情况会很复杂。
答案2
您应该只能使用 *.xml 作为文件名来移动 .xml 文件。这将导致以下命令:
move C:\source\folder\*.xml C:\destination\folder\