2017-02-22 36 views
-1

У меня есть несколько расширений, которые я хочу исключить из xcopy. Я не знаю, в какой папке/каталоге могут существовать.Исключить расширение нескольких файлов в xcopy

Ниже приводится команда, я использую:

xcopy /r /d /i /s /y C:\test1 C:\test2 /exclude:.txt+.exe 

Ань помощь по этому вопросу?

+3

'xcopy' исключает переключатель принимать только файлы из где прочитать список элементов для исключения. Создайте файл или используйте 'robocopy' и'/xf' переключатель –

+0

Отлично ..! Работает отлично. Большое спасибо за вашу помощь..! – user2817712

+3

Параметр '/ EXCLUDE'' xcopy' на самом деле не делает то, что вы хотите, он не исключает файлы с расширениями '.txt' и' .exe', он исключает все элементы, чьи полные пути содержат '.txt' или '.exe' в любой позиции; например, есть исходный файл 'C: \ test1 \ my.txt.files \ file.ext', он также будет исключен ... – aschipfl

ответ

3

Что вы ищете это:

xcopy /R /D /I /S /Y /EXCLUDE:exclude.txt "C:\test1" "C:\test2" 

Вместе со следующим содержанием exclude.txt:

.txt 
.exe 

Однако /EXCLUDE вариант xcopy очень плохо , На самом деле это не исключает файлы с указанными расширениями, фактически исключает все элементы, чьи полные пути содержат .txt или .exe в любой позиции. Предположим, что есть исходный файл C:\test1\my.txt.files\file.ext, он также будет исключен.


Есть несколько способов, чтобы преодолеть это, некоторые из которых я хочу показать вам:

  1. Используйте robocopy command и его /XF вариант:

    robocopy "C:\test1" "C:\test2" /S /XO /XF "*.txt" "*.exe" 
    
  2. Создать , используя for /F loop, вместе с xcopy /L, для предварительной фильтрации файлов:

    set /A "COUNT=0" 
    for /F "delims=" %%F in (' 
        rem/ // List files that would be copied without `/L`; remove summary line: ^&^
         xcopy /L /R /D /I /S /Y "C:\test1" "C:\test2" ^| find ".\" 
    ') do (
        rem // Check file extension of each file: 
        if /I not "%%~xF"==".txt" if /I not "%~xF"==".exe" (
         rem // Create destination directory, hide potential error messages: 
         2> nul mkdir "C:\test2\%%~F\.." 
         rem // Actually copy file, hide summary line: 
         > nul copy /Y "C:\test1\%%~F" "C:\test2\%%~F" && (
          rem // Return currently copied file: 
          set /A "COUNT+=1" & echo(%%~F 
         ) || (
          rem // Return message in case an error occurred: 
          >&2 echo ERROR: could not copy "%%~F"! 
         ) 
        ) 
    ) 
    echo   %COUNT% file^(s^) copied.