在Windows命令行中,我能否使用单个“copy”命令复制多个具有名称的文件?

39

我想在构建后操作的一部分将几个已知文件复制到另一个目录,但是我不想在我的构建事件中有很多“copy [file] [destination] [switches]”这样的行。

如果可能的话,我想用类似的格式列出要复制的文件:“copy [file 1] [file 2] [file 3] [等等...] [destination] [switches]”。然而,Windows似乎不喜欢这种格式。我应该怎么做?


Windows的复制命令能处理多个文件吗? - phuclv
3个回答

56
你可以在批处理文件或直接从命令提示符中使用 "for":
for %I in (file1.txt file2.txt file3.txt) do copy %I c:\somedir\

文件列表中也支持通配符:

for %I in (*.txt *.doc *.html) do copy %I c:\somedir\

要获取更多信息,只需在命令提示符中键入 /?,或使用开始菜单->帮助和支持,搜索 "for"以获得更易于阅读的帮助。在我的XP Pro电脑上,它是全文搜索结果中的第15项。


6
非常有效!唯一的问题是在生成事件中使用时需要加倍百分号(即对于 %%I in...)。谢谢! - Mark Carpenter
1
如果文件在子文件夹中,则添加 /f,例如 for /f %%I in (*.txt *.doc *.html) do copy %I c:\somedir\ - Matheus

32

XP和Vista用robocopy替换了xcopy,它将完全按照您的要求执行。起初,您想要的语法可能感觉有些反常,但它可以胜任工作:

robocopy source\folder a\dest\folder file1.exe file2.bat file3.dll file4.txt

1
XP的旧版本中不包括robocopy,您需要从类似于Windows 2003服务器资源工具包的东西中安装它:http://www.microsoft.com/Downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en - Dolphin
@Dolphin:干得好;我在我的XP机器上安装了它,但我不记得自己安装了它,但你是对的。 - Kevin
2
XP和Vista都没有“取代”xcopy。它仍然存在。 - Timwi
1
@Timwi,我表达不太清楚。我的意思是它被替换为复制多个文件的首选方式。 - Kevin

2

这个问题并没有暗示.NET已经安装,这需要开发一个MS Build脚本。仅仅执行命令行复制就已经很麻烦了,为什么还要增加这些额外的工作呢? - jpmc26
问题涉及到“作为后期构建事件的一部分复制”。对我来说,使用MSBuild是很自然的选择。 - David Schmitt
@DavidSchmitt 我认为这就是我想要的,但我不确定如何在构建事件中使用它。你能展示一下如何使用语法吗? - Jonathan Mee
你可以将这个直接作为XML插入到msbuild/csproj文件中。 - David Schmitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接