Batch file /仅针对文件类型在xcopy中排除

Batch file /仅针对文件类型在xcopy中排除,batch-file,xcopy,Batch File,Xcopy,我有一个批处理文件要从VisualStudio复制到我的Web文件夹。我想复制web项目中的所有文件,但*.cs文件除外。我似乎无法让它工作: xcopy /r /d /i /s /y /exclude:".cs" C:\dev\apan C:\web\apan 有什么建议吗?当我尝试运行此操作时,我只得到退出代码4。参数/EXCLUDE:需要一个包含已排除文件列表的文件 因此,创建一个名为excludedFileList.txt的文件,其中包含: .cs\ 然后像这样的命令: xcopy

我有一个批处理文件要从VisualStudio复制到我的Web文件夹。我想复制web项目中的所有文件,但*.cs文件除外。我似乎无法让它工作:

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

有什么建议吗?当我尝试运行此操作时,我只得到退出代码4。

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

因此,创建一个名为
excludedFileList.txt
的文件,其中包含:

.cs\
然后像这样的命令:

xcopy /r /d /i /s /y /exclude:excludedfileslist.txt C:\dev\apan C:\web\apan
或者,您可以使用,但需要将
robocopy.exe
安装/复制到计算机上

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

创建一个包含以下内容的
excludedFileList.txt
文件是正确的:

.cs
.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
文件被排除,也可以将
excludedFileList.txt
文件更改为仅包含以下内容:

.cs
.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
,这可能对您来说并不意外。

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

在我的示例中,我不得不从第二行开始一个排除扩展名列表,因为xcopy忽略了第一行。

排除多种文件类型,可以使用“+”连接其他列表。例如:

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

来源:

哦,这有点不方便,因为我正试图将此分发给我的整个开发团队。有什么解决办法吗?更新了答案,加入了机器人技术替代方案。好的,我明白了!我可以在批处理文件的开头创建文件:echo.cs>C:\nocs.txt请注意,要准确生成Dean Taylor所拥有的内容(特别是反斜杠),您可以这样做:echo.cs\>excludedFileList.txt直接写入C:\现在也不鼓励,因此如果相对路径不理想(对我来说),您可以尝试echo.cs\>%USERPROFILE%\excludedFileList.txt并在以后引用相同的值。如果有空格,我忽略了引号:echo.cs\>%USERPROFILE%\excludedFileList.txt我刚刚得到了这个答案,将排除文本文件的第一行留空就是答案——有人知道为什么第一行必须留空吗?我猜原因是您的
excludedFileList.txt
是在一个支持UTF-8的编辑器中创建的,并包含一个作为文件前两个字节的扩展名。或者只需将每个扩展名添加到单独的行中在单个排除文件中。