【问题标题】:/exclude in xcopy just for a file type/exclude 在 xcopy 中仅用于文件类型
【发布时间】:2011-05-14 05:21:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: batch-file xcopy


    【解决方案1】:

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

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

    .cs\
    

    然后是这样的命令:

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

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

    更新

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

    创建一个excludedfileslist.txt 文件确实包含:

    .cs
    

    (注意末尾没有反斜杠)

    还将排除以下所有内容:

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

    有时人们不阅读或不理解XCOPY command's help,这里有一个项目我想强调一下:

    使用 /exclude

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

    如示例所述,它排除了“所有扩展名为 .obj 的文件”,但并未说明它还排除了名为 file1.obj.tmpdir.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,这对您来说可能会或可能不会出乎意料。

    【讨论】:

    • 哦,这有点不便,因为我正试图将它分发给我的整个开发团队。有什么解决方法吗?
    • 更新了答案以包括 robocopy 替代方案。
    • 好的,我明白了!我可以在批处理文件的开头创建文件: echo .cs > C:\nocs.txt
    • 请注意,要准确生成 Dean Taylor 所拥有的内容(尤其是反斜杠),您可以这样做: echo .cs\ > excludefileslist.txt 现在也不鼓励直接写入 C:\,所以如果相对路径不理想(对我来说),您可以尝试 echo .cs\ > %USERPROFILE%\excludedfileslist.txt 并稍后参考
    • 呃,如果有空格,我忽略了引号来处理空格:echo .cs\ > "%USERPROFILE%\excludedfileslist.txt"
    【解决方案2】:

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

    【讨论】:

    • 我刚刚有了这个,将排除文本文件的第一行留空就是答案 - 任何人都知道为什么第一行必须为空?
    • 我猜这是因为您的 excludedfileslist.txt 是在支持 UTF-8 的编辑器中创建的,并且包含一个 BOM header 作为文件的前两个字节。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      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/

      【讨论】:

      • 或者简单地将每个扩展名添加到单个排除文件中的单独行。
      • 当心这个解释可能会被错误地理解。 /EXCLUDE 选项不指定要排除的文件。它指定包含要排除的文件列表的文件。 (stackoverflow.com/questions/43836172/…)
      • 感谢@ihebiheb的建议,我已经澄清了答案。
      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 2021-10-04
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多