/exclude в xcopy только для типа файла

У меня есть пакетный файл для копирования файлов из Visual Studio в мою веб-папку. Я хочу скопировать все файлы в своем веб-проекте, КРОМЕ файлов *.cs. Я не могу заставить это работать:

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

Какие-нибудь советы? Я просто получаю код выхода 4, когда пытаюсь запустить это.


person Matt Dell    schedule 23.11.2010    source источник


Ответы (4)


Аргумент /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, вот что я хотел бы выделить:

Использование /exclude

  • Перечислите каждую строку в отдельной строке в каждом файле. Если какая-либо из перечисленных строк совпадает с какой-либо частью абсолютного пути к файлу, который необходимо скопировать, этот файл исключается из процесса копирования. Например, если вы укажете строку «\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, что может быть для вас неожиданным, а может и нет.

person Dean Taylor    schedule 23.11.2010
comment
О, это немного неудобно, так как я пытаюсь распространить это на всю свою команду разработчиков. Есть ли обходные пути для этого? - person Matt Dell; 23.11.2010
comment
Обновлен ответ, чтобы включить альтернативу robocopy. - person Dean Taylor; 23.11.2010
comment
Ладно, я понял! Я могу просто создать файл в начале пакетного файла: echo .cs › C:\nocs.txt - person Matt Dell; 23.11.2010
comment
Я вижу, мы нашли это одновременно. Спасибо, Дин! - person Matt Dell; 23.11.2010
comment
Обновлено, чтобы указать на возможные неожиданные побочные эффекты исключения и добавить полный пример. - person Dean Taylor; 14.09.2013
comment
Обратите внимание, что для создания именно того, что было у Дина Тейлора (особенно обратную косую черту), вы должны сделать это: echo .cs\ › excludefileslist.txt Прямая запись в C:\ в наши дни также не рекомендуется, поэтому, если относительный путь не идеален (это для меня), вы можете попробовать echo .cs\ › %USERPROFILE%\excludedfileslist.txt и ссылаться на него позже - person Jon Coombs; 31.01.2014
comment
Эээ, я не использовал кавычки для обработки пробелов, если они есть: echo .cs\ › %USERPROFILE%\excludedfileslist.txt - person Jon Coombs; 31.01.2014
comment
Трюк echo xx.xx > excludes.txt — чистое золото, спасибо за идею! - person kingdango; 07.09.2015
comment
Пробовал это. Хотел исключить все файлы, содержащие ~, потому что у меня есть ряд программ, включая мой редактор, которые делают резервные копии имен файлов, содержащих ~, а сам я никогда не использую этот символ в именах файлов. Может это частный случай? Он скопировал файлы с ~ в именах! :( - person Victoria; 18.01.2016
comment
~ не был особым случаем. Проблема заключалась в том, что я не помещал CR в конец строки, прямо перед LF. - person Victoria; 18.01.2016
comment
@JonCoombs Но не заключайте в кавычки "/exclude:%USERPROFILE%\excludedfileslist.txt" - xcopy не может их обработать. - person Noumenon; 16.12.2017

В моем случае мне пришлось начать список исключаемых расширений со второй строки, потому что xcopy проигнорировал первую строку.

person VLKxCOOL    schedule 18.12.2013
comment
У меня только что было это, и ответом было оставить первую строку текстового файла исключения пустой - кто-нибудь знает, почему первая строка должна быть пустой? - person Rory Solley; 05.03.2015
comment
Я предполагаю, что причина этого в том, что ваш excludedfileslist.txt был создан в редакторе с поддержкой UTF-8 и включает заголовок спецификации . как первые два байта файла. - person Dean Taylor; 20.08.2019

Измените *.cs на .cs в файле excludefileslist.txt.

person Taiwo    schedule 15.11.2012

Для исключения нескольких типов файлов вы можете использовать «+» для объединения других списков. Например:

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/

person Leopoldo Sanczyk    schedule 02.12.2014
comment
Или просто добавьте каждое расширение в отдельные строки в одном файле исключения. - person angularsen; 07.02.2016