1

Я хотел бы иметь возможность перемещать папки (и любые подпапки и файлы) из одного места в другое; Тем не менее, я хочу, чтобы из каждой папки в начальной папке была перемещена только одна конкретная подпапка.

Вот пример моей существующей структуры папок:

E:\Estimates\Estimating Files\E27001
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings
E:\Estimates\Estimating Files\E27001\27001A - Customer1\Costings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings
E:\Estimates\Estimating Files\E27001\27001B - Customer2\Costings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings
E:\Estimates\Estimating Files\E27001\27001C - Customer3\Costings
E:\Estimates\Estimating Files\E27002
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings
E:\Estimates\Estimating Files\E27002\27002A - Customer1\Costings

У меня есть много оценок, так как вы можете увидеть некоторые с тем же номером, но с другой буквой суффикса, и имя клиента, очевидно, меняется.

Я хочу переместить только папки Drawings на новый диск и структуру папок, например:

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

Папки Drawings будут иметь подпапки и файлы, которые я хочу переместить также на новое место.

Пока мне удалось создать только пустые папки до этого уровня:

S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\

используя небольшой пакетный файл, для всех оценок от 27000 до 30000.

Но перемещение файлов и папок выходит за рамки моих возможностей, надеюсь, кто-нибудь сможет мне помочь или узнать о существующей утилите, которая может работать!

Спасибо!

3 ответа3

1

Попробуйте этот скрипт. Возможно, вам придется изменить буквы диска, хотя

setlocal EnableDelayedExpansion
@echo off
Q:
cd "Estimating\Estimating Files"
FOR /D /R %%G IN ("*Drawings*") DO (
FOR /F "tokens=4,5 delims=\" %%H IN ("%%G") DO (
set temp=%%H
set num=!temp:~4,2!
set temp=%%I
set alpha=!temp:~5!
MKDIR "Q:\E27XXX\0XX\!num!\!alpha!\Drawings"
CALL :mover "%%G" !num! !alpha!
)
)

:mover
FOR /R %1 %%X IN (*) DO (
COPY "%%X" "Q:\E27XXX\0XX\%2\%3 %4 %5\Drawings"
)
0

Вот последний код, который я использовал для копирования папок в новый каталог. Спасибо @ElektroStudios за помощь.

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=S:\E30xxx"

Set "findPattern=2 - Drawings"

For /F "Tokens=6,7,8,9 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "Token4=%%~d"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c\%%~d"
    Call Set "targetPath=%targetDir%\%%Token1:~3,1%%xx\%%Token2:~4,2%%\%%Token3:~6%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

Просто случай освоения RoboCoby и токенизации строки с разделителями.

0

Я хочу переместить только папки Drawings на новый диск и структуру папок, например:

Этот пакетный файл может помочь вам. Он находит все подпапки "Рисунки", разбивает на части частей путей к каталогам для создания новой структуры каталогов, затем копирует каждый найденный каталог с подкаталогами, используя инструмент RoboCopy .

ОЧЕНЬ ВАЖНО:

  • Убедитесь, что файл пакета находится внутри " ...\Estimating Files "и запустите ее оттуда, в противном случае вручную установите переменную sourceDir .

  • Перед использованием этого скрипта вы должны вручную отрегулировать количество токенов цикла For .

    Например, я использовал эту исходную папку C:\Source\Estimates\Estimating Files , нам нужно пропустить первые четыре токена, потому что мы хотим начать подсчет после части Estimating Files , поэтому я установил Tokens=4,5,6 в Сценарий ниже, если у вас другой путь, вы должны настроить токены.

    Если ваш исходный каталог E:\Estimates\Estimating Files тогда вы должны установить параметр tokens следующим образом: Tokens=3,4,5 .

  • Если вы хотите автоматически удалить скопированную исходную структуру, просто добавьте /Move в параметрах RoboCopy.


Исходный код

@Echo OFF

Set "sourceDir=%CD%"
Set "targetDir=C:\Target"

Set "findPattern=Drawings"

For /F "Tokens=4,5,6 Delims=\" %%a In (
    'Dir /B /S /A:D "%sourceDir%\*%findPattern%"'
) Do (
    Call Set "Token1=%%~a"
    Call Set "Token2=%%~b"
    Call Set "Token3=%%~c"
    Call Set "sourcePath=%CD%\%%~a\%%~b\%%~c"
    Call Set "targetPath=%targetDir%\%%Token1%%\%%Token1:~3%%\%%Token2:~3,2%%\%%Token2:~5%%\%%Token3%%"

    Echo+
    Call Echo Source: "%%sourcePath%%"
    Call Echo Target: "%%targetPath%%"

    (Call RoboCopy.exe "%%sourcePath%%" "%%targetPath%%" /E /ZB /COPYALL)1>Nul

)

Pause&Exit /B 0

Выход

Источник: "C:\Source\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings"

Цель: "C:\Target\E27001\001\01\A - Customer1\Drawings"

Источник: "C:\Source\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings"

Цель: "C:\Target\E27001\001\01\B - Customer2\Drawings"

Источник: "C:\Source\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings"

Цель: "C:\Target\E27001\001\01\C - Customer3\Drawings"

Источник: "C:\Source\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings"

Цель: "C:\Target\E27002\002\02\A - Customer1\Drawings"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .