脚本从子文件夹批量复制到主文件夹过滤扩展

时间:2019-03-17 16:42:58

标签: batch-file for-loop

我有这个模式

来源

FOLDER_A

---FOLDERA1

------file1.abc

------file2.abc

------file2.txt

---FOLDERB1

------file3.abc

------file4.abc

------file.txt

我想创建仅复制到新文件夹中的批处理脚本

目的地

FOLDER_A1

---file1.abc

---file2.abc

FOLDERB1

---file3.abc

---file4.abc

仅将目的地放入第二级(应删除FOLDER_A),并仅过滤扩展名为.abc的文件

我写了这段代码

@echo off

set SOURCE_DIR=C:\Users\%username%\Desktop\SCRIPT\source2 
set DEST_DIR=C:\Users\%username%\Desktop\SCRIPT\dest

pause
setlocal enabledelayedexpansion
for /f "delims=" %%a In ('dir /ad/b %SOURCE_DIR% ') do (
    set current_folder=%SOURCE_DIR%\%%a\

    mkdir "dest\%%a"

    for /r  %SOURCE_DIR% %%f in (*.abc) do (
    @copy "%%f" "dest\%%a"
)   
    pause
)
@pause

问题是,在目的地中,我有一个具有正确名称的文件夹,但是每次有4个文件file1.abcfile2.abcfile3.abcfile4.abc都位于文件夹中。

目标是仅在第一个文件夹file1.abcfile2.abc内,在第二个文件夹file3.abcfile4.abc中。

哪里出了错?

1 个答案:

答案 0 :(得分:0)

为什么要为此使用批处理文件和for循环? xcopyrobocopy命令都具有排除功能。只需输入xcopy /?robocopy /?即可获得更多信息,在Internet上,您可能会找到许多有关如何执行此操作的示例。

在第一个评论后编辑

使用/Exclude开关确实不是那么简单,如下面的示例所示:

C:\Temp_Folder\Folder_A>echo .txt>patterns.txt 
  // in this file, I mention that filenames, containing .txt, should not be copied

C:\Temp_Folder\Folder_A>xcopy /F /S C:\Temp_Folder\Folder_A\*.* C:\Temp_Folder\Destination\ /Exclude:C:\Temp_Folder\Folder_A\patterns.txt 
  // here I refer to the file, containing the patterns, not to copy
C:\Temp_Folder\Folder_A\FolderA1\file1.abc -> C:\Temp_Folder\Destination\FolderA1\file1.abc
C:\Temp_Folder\Folder_A\FolderA1\file2.abc -> C:\Temp_Folder\Destination\FolderA1\file2.abc
C:\Temp_Folder\Folder_A\FolderB1\file3.abc -> C:\Temp_Folder\Destination\FolderB1\file3.abc
C:\Temp_Folder\Folder_A\FolderB1\file4.abc -> C:\Temp_Folder\Destination\FolderB1\file4.abc
4 File(s) copied