Пакет, чтобы найти и скопировать папки из текстового списка

Я ищу пакет, чтобы найти и скопировать все папки, перечисленные в текстовом файле, в указанное место.

Например есть:

  1. Textfile.txt с содержанием:

    • 01
    • 02
    • 03
    • 04
    • и т.п.
  2. Головная папка с подпапками.

Папки, которые я ищу (папки из Textfile.txt), могут быть размещены в каждой подпапке. Если я хочу найти и скопировать папки из Textfile.txt в указанное место. Мне нужно зайти все подпапки из головной папки

Дерево папок с примерами

  1. Домашняя папка
    • Подпапки (11, 12, 13...)
    • Папки (01, 02, 03, 04,)

Пожалуйста, помогите мне с созданием этой партии. Благодарю.

Дополнительная информация:

- Домашняя папка (главная папка)
  - Джон (папка)
    - 01 (папка) (может быть пустым, без каких-либо папок и файлов)
      - 11-е (папка) (может быть пустым, без каких-либо папок и файлов)
        - file1.txt (файлы)
        - file2.xls
      - 12-е место
      - 13-е место
    - 02
    - 03
    - 04
  Томас
    - 05
      - 11-е место
      - 12-е место
      - 13-е место
    - 06
  - Ева
  Мартин
    - 07
      - 11-е место
      - 12-е место
      - 15-е место
  - Джордж
    - 08

Мне нужно найти и скопировать целые папки 01, 02, 03, 04 и т. Д. Из Textfile.txt, даже если они пусты.

1 ответ

Решение

Следующее должно работать в командном файле:

FOR /F %%F IN (Textfile.txt) DO xcopy /I /E "C:\Source\%%F" "D:\Dest\%%F"

Вы также можете применить еще несколько ключей:

  /C           Continues copying even if errors occur.
  /H           Copies hidden and system files also.
  /R           Overwrites read-only files.
  /Y           Suppresses prompting to confirm you want to overwrite an
               existing destination file.

Обновить

В вашем конкретном случае, когда у вас есть список папок, которые разбросаны по подпапкам, этот скрипт должен работать:

@echo off

set SRC_FOLDER="C:\Source"
set DST_FOLDER="C:\Destination"

REM this makes sure that if the first folder in list is empty - it is copied 
IF NOT EXIST %DST_FOLDER% MKDIR %DST_FOLDER%

REM loop through the items in list; use one per line 
REM for group match use <NAME>*
FOR /f %%F IN (%~dp0\Textfile.txt) DO (
   REM loop through all folders
   FOR /f "delims=" %%D IN ('DIR %SRC_FOLDER% /A:D /B') DO (
       REM loop through FOLDER/NAME* sub-folders
       FOR /f "delims=" %%G IN ('DIR %SRC_FOLDER%\"%%D\%%F" /A:D /B') DO (
          IF EXIST %SRC_FOLDER%\"%%D\%%G" XCOPY /I /E %SRC_FOLDER%\"%%D\%%G" %DST_FOLDER%\"%%~nG"
       )
       REM loop through all FOLDER subfolders to catch NAME subfolders 
       FOR /f "delims=" %%G IN ('DIR %SRC_FOLDER%\"%%D" /A:D /B') DO (
          IF "%%G" == "%%F" XCOPY /I /E %SRC_FOLDER%\"%%D\%%G" %DST_FOLDER%\"%%~nG"
       )
   )
)
  • Обратите внимание, что параметр "delims=" необходим для правильной обработки путей с пробелами.enter code here
Другие вопросы по тегам