Вопрос? (я знаю, что за это проголосуют, но я хочу помочь ОП и попытаться ясно понять проблему)
Итак, чтобы прояснить это, у вас есть две основные директории под названием
folders
& Raw
правильно?
Внутри folders
содержится каждая папка клиента, названная в вашем
name_surname_uniqueclientid
правильный формат?
Внутри Raw
у вас есть «сырые файлы и папки клиента», НО каждый с форматом имени name_surname_uniqueclientid
правильный?
Предполагаемое действительное имя папки следует после _uniqueclientid
в примере _10123_taxing.rtf
...?
Дерево папок?
C:\DATA
├───folders
│ ├───FirstName_Lastname_10123
│ ├───FirstName_Lastname_10124
│ └───FirstName_Lastname_10125
└───Raw
│ FirstName_Lastname_10123_taxing.rtf
│ FirstName_Lastname_10123_text.txt
│ FirstName_Lastname_10124_data.rtf
│ FirstName_Lastname_10124_text.txt
│ FirstName_Lastname_10125.rtf
│ FirstName_Lastname_10125_text.txt
│
├───FirstName_Lastname_10123_taxing
├───FirstName_Lastname_10124_numbers
└───FirstName_Lastname_10125_names
Цель
Так что, если какие-либо файлы в папке Raw
содержат uniqueclientid
в имени, вы хотите скопировать их в name_surname_uniqueclientid
, содержащийся в folders
..?
Новое дерево?
C:\DATA
├───folders
│ ├───FirstName_Lastname_10123
│ │ │ FirstName_Lastname_10123_taxing.rtf
│ │ │ FirstName_Lastname_10123_text.txt
│ │ │
│ │ └───FirstName_Lastname_10123_taxing
│ ├───FirstName_Lastname_10124
│ │ │ FirstName_Lastname_10124_data.rtf
│ │ │ FirstName_Lastname_10124_text.txt
│ │ │
│ │ └───FirstName_Lastname_10124_numbers
│ └───FirstName_Lastname_10125
│ │ FirstName_Lastname_10125.rtf
│ │ FirstName_Lastname_10125_text.txt
│ │
│ └───FirstName_Lastname_10125_names
└───Raw
РЕДАКТИРОВАТЬ: (рабочий раствор)
Если это действительно был ваш вопрос, то это рабочее решение вашей проблемы. Имейте в виду, что все функции, кодовые блоки и процессы имеют Rem |
, что объясняет это шаг за шагом в коде.
Таким образом, используя основы вашего кода, мы можем получить uniqueclientid
и оттуда мы установим это как строку с именем FolderIDNumber
. Эта строка будет использоваться внутри find
для отображения только допустимых папок внутри циклов dir
.
Поскольку основная папка folders
name_surname_uniqueclientid используется в цикле, мы можем свободно обрабатывать файлы в Raw
для перемещения. Это легко, так как теперь у нас есть все данные для dir
. Причина, по которой у нас два цикла dir
, заключается в том, что один захватывает только папки, а другой - только файлы. Таким образом, мы можем COPY
правильно переместить их в указанную папку name_surname_uniqueclientid .
@echo off
@setlocal enabledelayedexpansion
Rem | Configure Directories
Set "FolderLocation=C:\DATA\folders"
Set "RawLocation=C:\DATA\Raw"
Rem | Get All Folders Locations In X Directory
for /d %%A in ("!FolderLocation!\*") do (
Rem | Set Raw Location
Set "FoldersLoc=%%A"
Rem | Get Each ID# From %%A
for /f "tokens=3 delims=_" %%B in ("%%A") do (
Rem | Set Folders ID#
Set "FolderIDNumber=%%B"
)
Rem | Get Each Folder W/H !FolderIDNumber!
for /f "tokens=*" %%C in ('Dir "!RawLocation!\" /B /A:D^| find "!FolderIDNumber!"') do (
Rem | Set Raw Location & Name
Set "RawFolderLoc=!RawLocation!\%%C"
Set "RawFoldersName=%%~nC"
Rem | Move Folders
robocopy "!RawFolderLoc!" "!FoldersLoc!\!RawFoldersName!" /E /NJH /NJS /NDL /NFL /NC /NS>NUL
)
Rem | Get Each File W/H !FolderIDNumber!
for /f "tokens=*" %%D in ('Dir "!RawLocation!\*.*" /B /A-D^| find "!FolderIDNumber!"') do (
Rem | Set Raw Location
Set "RawFileLoc=!RawLocation!\%%D"
Rem | Move Files
copy "!RawFileLoc!" "!FoldersLoc!">NUL
)
)
goto :EOF
Для получения справки по любой из команд выполните следующее:
call /?
set /?
for /?
if /?
find /?
- И так далее.