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
sourceDir
variável.Antes de usar este script, você deve ajustar manualmente a contagem de tokens do
For
loop.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 daEstimating Files
parte, por isso definiTokens=4,5,6
no 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
/Move
nos 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.