在xcopy中/ exclude仅用于文件类型


68

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

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

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

Answers:


135

/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.tmp或的文件或目录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了可能对您而言并非偶然的情况。


哦,这有点不便,因为我正试图将其分发给我的整个开发团队。有什么解决方法吗?
马特·戴尔

1
更新了答案以包括robocopy替代方法。
迪恩·泰勒

9
好,我知道了!我可以在批处理文件的开头创建文件:echo .cs> C:\ nocs.txt
Matt Dell 2010年

1
请注意,要完全生成Dean Taylor的内容(尤其是反斜杠),您可以这样做:echo .cs \> excludeedfileslist.txt这些天也不鼓励直接写到C:\,因此,如果相对路径不理想(这是我),你可以尝试回声的.cs \>%USERPROFILE%\ excludedfileslist.txt后来引用相同的
乔恩·库姆斯

2
嗯,如果有空格,我会忽略引号来处理空格:echo .cs \>“%USERPROFILE%\ excludedfileslist.txt”
Jon Coombs 2014年

8

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


2
我刚刚有了这个,将排除文本文件的第一行留空就是答案-有人知道为什么第一行必须留空吗?
罗里·索利2015年

我的猜测是您的文件excludedfileslist.txt是在具有UTF-8功能的编辑器中创建的,并且包含BOM表头作为文件的前两个字节。
迪恩·泰勒


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.