Movendo arquivos/pastas para nova estrutura

Movendo arquivos/pastas para nova estrutura

Gostaria de poder mover pastas (e quaisquer subpastas e arquivos) de um local para outro; no entanto, desejo apenas que uma subpasta específica seja movida de cada pasta no local inicial.

Aqui está um exemplo da minha estrutura de pastas 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

Tenho muitas estimativas, pois você pode ver algumas com o mesmo número, mas com uma letra de sufixo diferente, e o nome do cliente obviamente muda.

Quero mover apenas as pastas Desenhos para uma nova unidade e estrutura de pastas, assim:

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

As pastas Desenhos também terão subpastas e arquivos que desejo mover para o novo local.

Até agora, só consegui criar as pastas vazias até este nível:

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

usando um pequeno arquivo em lote, para todas as estimativas de 27.000 a 30.000.

Mas mover os arquivos e pastas está além das minhas capacidades, espero que alguém possa me ajudar ou conheça um utilitário existente que possa funcionar!

Obrigado!

Responder1

Quero mover apenas as pastas Desenhos para uma nova unidade e estrutura de pastas, assim:

Este arquivo em lote pode ajudá-lo. Ele encontra todas as subpastas "Desenhos", tokeniza as partes dos caminhos de diretório para construir a nova estrutura de diretório e, em seguida, copia cada diretório encontrado com subdiretórios usandoRoboCópiaferramenta.

MUITO IMPORTANTE:

  • Certifique-se de colocar o arquivo em lote dentro de "...\Estimando arquivos" e execute-o a partir daí, caso contrário, defina manualmente a sourceDirvariável.

  • Antes de usar este script, você deve ajustar manualmente a contagem de tokens do Forloop.

    Por exemplo, usei esta pasta de origem C:\Source\Estimates\Estimating Files, precisamos perder os quatro primeiros tokens porque queremos começar a contar depois da Estimating Filesparte, por isso defini Tokens=4,5,6no script abaixo, se você tiver um caminho diferente então deverá ajustar os tokens.

    Se o seu diretório de origem for E:\Estimates\Estimating Files, você deve definir o parâmetro tokens assim: Tokens=3,4,5.

  • Se quiser excluir automaticamente a estrutura de origem copiada, basta acrescentar a /Movenos parâmetros do RoboCopy.


Código fonte

@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

Saída

Fonte: "C:\Fonte\Estimativas\Arquivos de estimativas\E27001\27001A - Cliente1\Desenhos"

Destino: "C:\Target\E27001\001\01\A - Cliente1\Desenhos"

Fonte: "C:\Fonte\Estimativas\Arquivos de estimativas\E27001\27001B - Cliente2\Desenhos"

Destino: "C:\Target\E27001\001\01\B - Cliente2\Desenhos"

Fonte: "C:\Fonte\Estimativas\Arquivos de estimativas\E27001\27001C - Cliente3\Desenhos"

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

Fonte: "C:\Fonte\Estimativas\Arquivos de estimativas\E27002\27002A - Cliente1\Desenhos"

Destino: "C:\Target\E27002\002\02\A - Cliente1\Desenhos"

Responder2

Experimente este script. Pode ser necessário editar as letras das 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"
)

Responder3

Aqui está o código final que usei para copiar as pastas para o novo diretório. Obrigado ao @ElektroStudios pela ajuda.

@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

Apenas um caso de se familiarizar com o RoboCoby e a tokenização da string delimitada.

informação relacionada