/exclude in xcopy just for a file type

后端 未结 4 1060
伪装坚强ぢ
伪装坚强ぢ 2020-12-04 16:05

I have a batch file to copy over files from Visual Studio to my Web folder. I want to copy all files in my web project, EXCEPT for *.cs files. I can\'t seem to get this to

相关标签:
4条回答
  • 2020-12-04 16:39

    The /EXCLUDE: argument expects a file containing a list of excluded files.

    So create a file called excludedfileslist.txt containing:

    .cs\
    

    Then a command like this:

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

    Alternatively you could use Robocopy, but would require installing / copying a robocopy.exe to the machines.

    Update

    An anonymous comment edit which simply stated "This Solution exclude also css file!"

    This is true creating a excludedfileslist.txt file contain just:

    .cs
    

    (note no backslash on the end)

    Will also exclude all of the following:

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

    Sometimes people don't read or understand the XCOPY command's help, here is an item I would like to highlight:

    Using /exclude

    • List each string in a separate line in each file. If any of the listed strings match any part of the absolute path of the file to be copied, that file is then excluded from the copying process. For example, if you specify the string "\Obj\", you exclude all files underneath the Obj directory. If you specify the string ".obj", you exclude all files with the .obj extension.

    As the example states it excludes "all files with the .obj extension" but it doesn't state that it also excludes files or directories named file1.obj.tmp or dir.obj.output\example2.txt.

    There is a way around .css files being excluded also, change the excludedfileslist.txt file to contain just:

    .cs\
    

    (note the backslash on the end).

    Here is a complete test sequence for your reference:

    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
    

    This test was completed on a Windows 7 command line and retested on Windows 10 "10.0.14393".

    Note that the last example does exclude .\src\dir2.cs\file5.txt which may or may not be unexpected for you.

    0 讨论(0)
  • 2020-12-04 16:46

    For excluding multiple file types, you can use '+' to concatenate other lists. For example:

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

    Source: http://www.tech-recipes.com/rx/2682/xcopy_command_using_the_exclude_flag/

    0 讨论(0)
  • 2020-12-04 16:52

    Change *.cs to .cs in the excludefileslist.txt

    0 讨论(0)
  • 2020-12-04 16:55

    In my case I had to start a list of exclude extensions from the second line because xcopy ignored the first line.

    0 讨论(0)
提交回复
热议问题