Я хотел бы иметь возможность перемещать папки (и любые подпапки и файлы) из одного места в другое; однако я хочу, чтобы из каждой папки в исходном месте была перемещена только одна конкретная подпапка.
Вот пример моей существующей структуры папок:
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
У меня много оценок, как вы видите, некоторые из них имеют один и тот же номер, но другую букву в суффиксе, и имя заказчика, очевидно, меняется.
Я хочу переместить только папки «Рисунки» на новый диск и структуру папок, например, так:
S:\E27xxx\0xx\01\A - Customer1\
S:\E27xxx\0xx\01\B - Customer2\
S:\E27xxx\0xx\01\C - Customer3\
S:\E27xxx\0xx\02\A - Customer1\
Папки «Рисунки» также будут содержать подпапки и файлы, которые я хочу переместить в новое место.
Пока мне удалось создать пустые папки только до этого уровня:
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.
Но перемещение файлов и папок выходит за рамки моих возможностей. Надеюсь, кто-нибудь сможет мне помочь или знает существующую утилиту, которая могла бы это сделать!
Спасибо!
решение1
Я хочу переместить только папки «Рисунки» на новый диск и структуру папок, например, так:
Этот пакетный файл может вам помочь. Он находит все подпапки "Drawings", токенизирует части путей каталогов для построения новой структуры каталогов, затем копирует каждый найденный каталог с подкаталогами, используяRoboCopyинструмент.
ОЧЕНЬ ВАЖНО:
Обязательно поместите пакетный файл внутрь "...\Оценка файлов" папку и запустить его оттуда, в противном случае вручную задать
sourceDir
переменную.Перед использованием этого скрипта вам следует вручную настроить количество токенов цикла
For
.Например, я использовал эту исходную папку
C:\Source\Estimates\Estimating Files
, нам нужно пропустить первые четыре токена, потому что мы хотим начать отсчет после частиEstimating Files
, вот почему я установилTokens=4,5,6
в скрипте ниже, если у вас другой путь, то вам следует скорректировать токены.Если ваш исходный каталог — ,
E:\Estimates\Estimating Files
то вам следует установить параметр tokens следующим образом:Tokens=3,4,5
.Если вы хотите автоматически удалить скопированную исходную структуру, просто добавьте a
/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:\Цель\E27001\001\01\A - Customer1\Чертежи"
Источник: "C:\Source\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings"
Цель: "C:\Цель\E27001\001\01\B - Customer2\Чертежи"
Источник: "C:\Source\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings"
Цель: "C:\Цель\E27001\001\01\C - Customer3\Чертежи"
Источник: "C:\Source\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings"
Цель: "C:\Target\E27002\002\02\A - Customer1\Drawings"
решение2
Попробуйте этот скрипт. Возможно, вам придется изменить буквы дисков.
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"
)
решение3
Вот окончательный код, который я использовал для копирования папок в новый каталог. Спасибо @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 и токенизации разделенной строки.