73

我有一个批处理文件可以将文件从 Visual Studio 复制到我的 Web 文件夹。我想复制我的网络项目中的所有文件,*.cs 文件除外。我似乎无法让它工作:

xcopy /r /d /i /s /y /exclude:".cs" C:\dev\apan C:\web\apan

有小费吗?当我尝试运行它时,我只是得到退出代码 4。

4

4 回答 4

149

/EXCLUDE:参数需要一个包含排除文件列表的文件。

所以创建一个名为excludedfileslist.txt包含的文件:

.cs\

然后是这样的命令:

xcopy /r /d /i /s /y /exclude:excludedfileslist.txt C:\dev\apan C:\web\apan

或者,您可以使用Robocopy,但需要将 a 安装/复制robocopy.exe到机器上。

更新

匿名评论编辑,简单地说“此解决方案也排除 css 文件!”

这是真的,创建一个excludedfileslist.txt文件只包含:

.cs

(注意最后没有反斜杠)

还将排除以下所有内容:

  • file1.cs
  • file2.css
  • dir1.cs\file3.txt
  • dir2\anyfile.cs.something.txt

有时人们不阅读或不理解XCOPY 命令的帮助,这里有一个项目我想强调:

使用 / 排除

  • 在每个文件的单独行中列出每个字符串。如果任何列出的字符串与要复制的文件的绝对路径的任何部分匹配,则该文件将从复制过程中排除。例如,如果您指定字符串“\Obj”,则会排除 Obj 目录下的所有文件。如果指定字符串“.obj”,则排除所有扩展名为 .obj 的文件。

如示例所述,它排除了“所有带有 .obj 扩展名的文件”,但并未说明它还排除了名为file1.obj.tmpor的文件或目录dir.obj.output\example2.txt

还有一种方法.css可以排除文件,将excludedfileslist.txt文件更改为仅包含:

.cs\

(注意末尾的反斜杠)。

这是一个完整的测试序列供您参考:

C:\test1>ver

Microsoft Windows [Version 6.1.7601]

C:\test1>md src
C:\test1>md dst
C:\test1>md src\dir1
C:\test1>md src\dir2.cs
C:\test1>echo "file contents" > src\file1.cs
C:\test1>echo "file contents" > src\file2.css
C:\test1>echo "file contents" > src\dir1\file3.txt
C:\test1>echo "file contents" > src\dir1\file4.cs.txt
C:\test1>echo "file contents" > src\dir2.cs\file5.txt

C:\test1>xcopy /r /i /s /y .\src .\dst
.\src\file1.cs
.\src\file2.css
.\src\dir1\file3.txt
.\src\dir1\file4.cs.txt
.\src\dir2.cs\file5.txt
5 File(s) copied

C:\test1>echo .cs > excludedfileslist.txt
C:\test1>xcopy /r /i /s /y /exclude:excludedfileslist.txt .\src .\dst
.\src\dir1\file3.txt
1 File(s) copied

C:\test1>echo .cs\ > excludedfileslist.txt
C:\test1>xcopy /r /i /s /y /exclude:excludedfileslist.txt .\src .\dst
.\src\file2.css
.\src\dir1\file3.txt
.\src\dir1\file4.cs.txt
3 File(s) copied

此测试在 Windows 7 命令行上完成,并在 Windows 10“10.0.14393”上重新测试。

请注意,最后一个示例确实排除.\src\dir2.cs\file5.txt了您可能会或可能不会意外的内容。

于 2010-11-23T02:30:34.647 回答
8

就我而言,我必须从第二行开始排除扩展名列表,因为 xcopy 忽略了第一行。

于 2013-12-18T10:46:21.017 回答
5

在 excludefileslist.txt 中将 *.cs 更改为 .cs

于 2012-11-15T20:20:08.863 回答
1

要排除多种文件类型,您可以使用“+”连接更多列表(包含要排除的文件类型,如接受的答案所示)。例如:

xcopy /r /d /i /s /y /exclude:excludedfileslist1.txt+excludedfileslist2.txt C:\dev\apan C:\web\apan

资料来源:http ://www.tech-recipes.com/rx/2682/xcopy_command_using_the_exclude_flag/

于 2014-12-02T03:16:03.867 回答