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
sourceDir
Variable manuell fest.Bevor Sie dieses Skript verwenden, sollten Sie die Token-Anzahl der
For
Schleife manuell anpassen.Ich habe beispielsweise diesen Quellordner verwendet
C:\Source\Estimates\Estimating Files
. Wir müssen die ersten vier Token weglassen, da wir nach diesemEstimating Files
Teil mit dem Zählen beginnen möchten. Deshalb habe ich esTokens=4,5,6
im 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
/Move
an 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.