Verschieben von Dateien/Ordnern in eine neue Struktur

Verschieben von Dateien/Ordnern in eine neue Struktur

Ich möchte Ordner (und alle Unterordner und Dateien) von einem Speicherort zum anderen verschieben können. Ich möchte jedoch nur einen bestimmten Unterordner aus jedem Ordner am Startspeicherort verschieben.

Hier ist ein Beispiel meiner vorhandenen Ordnerstruktur:

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

Ich habe viele Kostenvoranschläge. Wie Sie sehen, haben einige die gleiche Nummer, aber einen anderen Suffixbuchstaben, und der Kundenname ändert sich offensichtlich.

Ich möchte nur die Zeichnungen-Ordner auf ein neues Laufwerk und in eine neue Ordnerstruktur verschieben, und zwar wie folgt:

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

Die Zeichnungsordner enthalten Unterordner und Dateien, die ich ebenfalls an den neuen Speicherort verschieben möchte.

Bisher ist es mir nur gelungen, leere Ordner bis zu dieser Ebene zu erstellen:

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

mithilfe einer kleinen Batchdatei für alle Schätzungen von 27.000 bis 30.000.

Aber das Verschieben der Dateien und Ordner übersteigt meine Fähigkeiten. Hoffentlich kann mir jemand helfen oder kennt ein vorhandenes Dienstprogramm, das funktionieren könnte!

Danke!

Antwort1

Ich möchte nur die Zeichnungen-Ordner auf ein neues Laufwerk und in eine neue Ordnerstruktur verschieben, und zwar wie folgt:

Diese Batchdatei könnte Ihnen helfen. Sie findet alle Unterordner „Drawings“, tokenisiert die Teile der Verzeichnispfade, um die neue Verzeichnisstruktur zu erstellen, und kopiert dann jedes gefundene Verzeichnis mit Unterverzeichnissen unter Verwendung vonRoboCopyWerkzeug.

SEHR WICHTIG:

  • Stellen Sie sicher, dass die Batchdatei im "...\Schätzdateien"-Ordner und führen Sie es von dort aus, andernfalls legen Sie die sourceDirVariable manuell fest.

  • Bevor Sie dieses Skript verwenden, sollten Sie die Token-Anzahl der ForSchleife manuell anpassen.

    Ich habe beispielsweise diesen Quellordner verwendet C:\Source\Estimates\Estimating Files. Wir müssen die ersten vier Token weglassen, da wir nach diesem Estimating FilesTeil mit dem Zählen beginnen möchten. Deshalb habe ich es Tokens=4,5,6im folgenden Skript festgelegt. Wenn Sie einen anderen Pfad haben, sollten Sie die Token anpassen.

    Wenn Ihr Quellverzeichnis ist E:\Estimates\Estimating Files, sollten Sie den Token-Parameter wie folgt festlegen: Tokens=3,4,5.

  • Wenn Sie die kopierte Quellstruktur automatisch löschen möchten, fügen Sie einfach ein /Movean die RoboCopy-Parameter an.


Quellcode

@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

Ausgabe

Quelle: "C:\Source\Estimates\Estimating Files\E27001\27001A - Customer1\Drawings"

Ziel: "C:\Ziel\E27001\001\01\A - Kunde1\Zeichnungen"

Quelle: "C:\Source\Estimates\Estimating Files\E27001\27001B - Customer2\Drawings"

Ziel: "C:\Ziel\E27001\001\01\B - Kunde2\Zeichnungen"

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

Ziel: "C:\Ziel\E27001\001\01\C - Kunde3\Zeichnungen"

Quelle: "C:\Source\Estimates\Estimating Files\E27002\27002A - Customer1\Drawings"

Ziel: "C:\Ziel\E27002\002\02\A - Kunde1\Zeichnungen"

Antwort2

Versuchen Sie dieses Skript. Möglicherweise müssen Sie jedoch die Laufwerksbuchstaben bearbeiten

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

Antwort3

Hier ist der endgültige Code, den ich verwendet habe, um die Ordner in das neue Verzeichnis zu kopieren. Danke an @ElektroStudios für ihre Hilfe.

@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

Man muss sich nur mit RoboCoby und der Tokenisierung der abgegrenzten Zeichenfolge vertraut machen.

verwandte Informationen