我有这个模式
来源
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.abc
,file2.abc
,file3.abc
和file4.abc
都位于文件夹中。
目标是仅在第一个文件夹file1.abc
和file2.abc
内,在第二个文件夹file3.abc
和file4.abc
中。
哪里出了错?
答案 0 :(得分:0)
为什么要为此使用批处理文件和for循环? xcopy
和robocopy
命令都具有排除功能。只需输入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