Пакетное копирование скрипта из подпапки в расширение фильтрации основной папки - PullRequest
0 голосов
/ 17 марта 2019

У меня есть эта схема

ИСТОЧНИК

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.

Где ошибка?

1 Ответ

0 голосов
/ 17 марта 2019

Почему вы используете для этого пакетные файлы и циклы for?Обе команды xcopy и robocopy имеют функции исключения.Просто введите xcopy /? и robocopy /? для получения дополнительной информации, и в Интернете вы можете найти множество примеров того, как это сделать.

Изменить после первого комментария

С переключателем /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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...