2017-02-22 114 views
-1

我有幾個擴展名,我想從xcopy中排除。我不知道可能存在的文件夾/目錄。在xcopy中排除多個文件擴展名

下面是命令我使用:

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

這個映幫助?

+3

'xcopy' exclude switch只接受從哪裏讀取要排除的元素列表中的文件。創建文件或使用'robocopy'和'/ xf'開關 –

+0

優秀..!完美的作品。非常感謝你的幫助..! – user2817712

+3

'xcopy'的'/ EXCLUDE'選項並沒有真正達到你想要的效果,它不排除擴展名爲'.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 

然而,xcopy/EXCLUDE選擇是非常差。它不會真正排除具有給定擴展名的文件,它實際上排除了全路徑在任何位置包含.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. 
    
相關問題