Mover archivos/carpetas a una nueva estructura

Mover archivos/carpetas a una nueva estructura

Me gustaría poder mover carpetas (y cualquier subcarpeta y archivo) de una ubicación a otra; sin embargo, solo quiero que se mueva una subcarpeta específica de cada carpeta en la ubicación inicial.

Aquí hay un ejemplo de mi estructura de carpetas existente:

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

Tengo muchos estimados, como pueden ver algunos con el mismo número pero con diferente letra de sufijo, y el nombre del Cliente obviamente cambia.

Quiero mover sólo las carpetas de Dibujos a una nueva unidad y estructura de carpetas, como esta:

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

Las carpetas de Dibujos también tendrán subcarpetas y archivos que quiero mover a la nueva ubicación.

Hasta ahora, sólo he logrado crear las carpetas vacías hasta este nivel:

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

utilizando un pequeño archivo por lotes, para todas las estimaciones de 27000 a 30000.

Pero mover archivos y carpetas está más allá de mis capacidades, espero que alguien pueda ayudarme o conozca una utilidad existente que pueda funcionar.

¡Gracias!

Respuesta1

Quiero mover sólo las carpetas de Dibujos a una nueva unidad y estructura de carpetas, como esta:

Este archivo por lotes podría ayudarle. Encuentra todas las subcarpetas "Dibujos", tokeniza las partes de las rutas del directorio para construir la nueva estructura del directorio, luego copia cada directorio encontrado con subdirectorios usandoRobocopiaherramienta.

MUY IMPORTANTE:

  • Asegúrese de colocar el archivo por lotes dentro de "...\Archivos de estimación"carpeta y ejecútelo desde allí; de lo contrario, configure manualmente la sourceDirvariable.

  • Antes de utilizar este script, debes ajustar manualmente el recuento de tokens del Forbucle.

    Por ejemplo, utilicé esta carpeta de origen C:\Source\Estimates\Estimating Files, debemos omitir los primeros cuatro tokens porque queremos comenzar a contar después de la Estimating Filesparte, es por eso que configuré Tokens=4,5,6en el script a continuación, si tiene una ruta diferente, entonces debe ajustar los tokens.

    Si su directorio de origen es E:\Estimates\Estimating Filesentonces debe configurar el parámetro tokens de esta manera: Tokens=3,4,5.

  • Si desea eliminar automáticamente la estructura fuente copiada, simplemente agregue a /Moveen los parámetros de RoboCopy.


Código fuente

@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

Producción

Fuente: "C:\Fuente\Estimaciones\Archivos de estimación\E27001\27001A - Cliente1\Dibujos"

Destino: "C:\Destino\E27001\001\01\A - Cliente1\Dibujos"

Fuente: "C:\Fuente\Estimaciones\Archivos de estimación\E27001\27001B - Cliente2\Dibujos"

Destino: "C:\Destino\E27001\001\01\B - Cliente2\Dibujos"

Fuente: "C:\Source\Estimates\Estimating Files\E27001\27001C - Customer3\Drawings"

Destino: "C:\Target\E27001\001\01\C - Cliente3\Drawings"

Fuente: "C:\Fuente\Estimaciones\Archivos de estimación\E27002\27002A - Cliente1\Dibujos"

Destino: "C:\Destino\E27002\002\02\A - Cliente1\Dibujos"

Respuesta2

Pruebe este script. Es posible que tengas que editar las letras de las unidades.

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"
)

Respuesta3

Aquí está el código final que utilicé para copiar las carpetas al nuevo directorio. Gracias a @ElektroStudios por su ayuda.

@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

Sólo es cuestión de familiarizarse con RoboCoby y tokenizar la cadena delimitada.

información relacionada