Robocopy - ECHTES verschieben möglich?
Robocopy kopiert anstatt zu verschieben. Ich brauche ein Tool zum verschieben mit Batch Script.
Hallo!
Ist es möglich mit Robocopy oder einem vergleichbaren CMD Tool, Dateien auf einer HD zu verschieben?
In meinem Batch-Script soll Robocopy aus einer Verzeichnisstruktur, bestimmte Dateien verschieben. Dabei kommt es mir vor allem auf den Geschwindigkeitsvorteil des Verschiebens an. Bisher KOPIERT Robocopy die Dateien einfach in das andere Verzeichnis und löscht die Dateien im Ursprungsverzeichnis hinterher. Die Dateien befinden sich in Unterverzeichnissen und sind mehrere Gb groß.
Meine CL sieht etwa so aus:
ROBOCOPY "C:\1" "C:\2" *.v2i *.bak /S /MOVE
Der Befehl "MOVE C:\1 C:\2" verschiebt zwar die Dateien auf der HD, aber dabei fehlt mir die Filteroption die ich benötige.
Ich verwende Windows 7 und die Version von Robocopy 5.1.10.1027 (XP027). Gibt es eine neuere Version von Robocopy, die das Problem beheben könnte? Auf der Microsoft Seite habe ich bisher nichts entdecken können.
Oder gibt es ein CMD Tool das ähnliche Filteroptionen wir Robocopy besitzt und die Dateien tatsächlich verschieben kann?
mfg
Hallo!
Ist es möglich mit Robocopy oder einem vergleichbaren CMD Tool, Dateien auf einer HD zu verschieben?
In meinem Batch-Script soll Robocopy aus einer Verzeichnisstruktur, bestimmte Dateien verschieben. Dabei kommt es mir vor allem auf den Geschwindigkeitsvorteil des Verschiebens an. Bisher KOPIERT Robocopy die Dateien einfach in das andere Verzeichnis und löscht die Dateien im Ursprungsverzeichnis hinterher. Die Dateien befinden sich in Unterverzeichnissen und sind mehrere Gb groß.
Meine CL sieht etwa so aus:
ROBOCOPY "C:\1" "C:\2" *.v2i *.bak /S /MOVE
Der Befehl "MOVE C:\1 C:\2" verschiebt zwar die Dateien auf der HD, aber dabei fehlt mir die Filteroption die ich benötige.
Ich verwende Windows 7 und die Version von Robocopy 5.1.10.1027 (XP027). Gibt es eine neuere Version von Robocopy, die das Problem beheben könnte? Auf der Microsoft Seite habe ich bisher nichts entdecken können.
Oder gibt es ein CMD Tool das ähnliche Filteroptionen wir Robocopy besitzt und die Dateien tatsächlich verschieben kann?
mfg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146980
Url: https://administrator.de/contentid/146980
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
12 Kommentare
Neuester Kommentar
moin,
dazu sagt meinePsychaterinKristallkugel mir fehlt auch was, das ich zum beantworten benötige
Da dieDame/Kugel meistens Recht hat - bist du jetzt dran.
gruß
Ist es möglich mit Robocopy oder einem vergleichbaren CMD Tool, Dateien auf einer HD zu verschieben?
Theologisch gesehen JeinDer Befehl "MOVE C:\1 C:\2" verschiebt zwar die Dateien auf der HD, aber dabei fehlt mir die Filteroption die ich benötige.
dazu sagt meine
Da die
gruß
Da es sich um ein Skript handelt, kannst du nach dem Robocopy nicht einfach ein Erase auf den Ordner machen?
ROBOCOPY "C:\1" "C:\2" *.v2i *.bak /S /MOVE
Wenn ich den Befehl richtig lese kopierst du alle Dateien mit den Endungen .bak und .v2i und sämtliche Unterordner (außer den Leeren) von C1 nach C2
Wie man die Unterordner dann löscht muss ich mir noch überlegen, da der Parameter /S ine andere Bedeutung beim Erase hat.
Erase c:\1\*.v2i
Erase c:\2\*bak
ROBOCOPY "C:\1" "C:\2" *.v2i *.bak /S /MOVE
Wenn ich den Befehl richtig lese kopierst du alle Dateien mit den Endungen .bak und .v2i und sämtliche Unterordner (außer den Leeren) von C1 nach C2
Wie man die Unterordner dann löscht muss ich mir noch überlegen, da der Parameter /S ine andere Bedeutung beim Erase hat.
Erase c:\1\*.v2i
Erase c:\2\*bak
Hallo SystemForscher,
hier mal ein Vorschlag zur Lösung Deines Problems, habe erstmal den COPY-Befehl in den Code eingesetzt, kannst Du ja nach ausgiebigen Tests durch MOVE ersetzen:
Speichere den Code als rmove.bat. Der Aufruf sieht dann so aus:
rmove <Quellverzeichnis> <Zielverzeichnis> <Dateimaske>
Das Zielverzeichnis muss bereits existieren. Sollte einer der Parameter Leerzeichen enthalten, muss er in Anführungszeichen eingeschlossen werden.
Der Code ruft sich selbst rekursiv auf und erstellt dabei im Zielverzeichnis alle (Unter-)Verzeichnisse aus dem Quellverzeichnis, die Dateien enthalten, auf die die Dateimaske passt. COPY/MOVE kann ja von sich aus keine Verzeichnisbäume kopieren/verschieben, daher wahrscheinlich Dein Posting.
Gruß
Friemler
hier mal ein Vorschlag zur Lösung Deines Problems, habe erstmal den COPY-Befehl in den Code eingesetzt, kannst Du ja nach ausgiebigen Tests durch MOVE ersetzen:
@echo off
setlocal
set src=%~1
set dest=%~2
if "%src:~-1%"=="\" (
set src=%src:~0,-1%
)
if "%dest:~-1%"=="\" (
set dest=%dest:~0,-1%
)
for /f "delims=" %%p in ('dir "%src%\" /b /-p /a:d 2^>NUL') do (
call "%~0" "%src%\%%p" "%dest%\%%p" %3
)
if "%dest:~-1%"==":" (
set dest=%dest%\
)
if exist "%src%\%~1" (
md "%dest%" > NUL 2>&1
copy "%src%\%~1" "%dest%"
)
endlocal
Speichere den Code als rmove.bat. Der Aufruf sieht dann so aus:
rmove <Quellverzeichnis> <Zielverzeichnis> <Dateimaske>
Das Zielverzeichnis muss bereits existieren. Sollte einer der Parameter Leerzeichen enthalten, muss er in Anführungszeichen eingeschlossen werden.
Der Code ruft sich selbst rekursiv auf und erstellt dabei im Zielverzeichnis alle (Unter-)Verzeichnisse aus dem Quellverzeichnis, die Dateien enthalten, auf die die Dateimaske passt. COPY/MOVE kann ja von sich aus keine Verzeichnisbäume kopieren/verschieben, daher wahrscheinlich Dein Posting.
Gruß
Friemler
Hallo SystemForscher,
hier noch eine Version, die auch mehrere Dateimasken zulässt:
Gruß
Friemler
hier noch eine Version, die auch mehrere Dateimasken zulässt:
@echo off
setlocal
set prgname=%~0
set src=%~1
set dest=%~2
if "%src:~-1%"=="\" (
set src=%src:~0,-1%
)
if "%dest:~-1%"=="\" (
set dest=%dest:~0,-1%
)
shift
shift
for /f "delims=" %%p in ('dir "%src%\" /b /-p /a:d 2^>NUL') do (
call "%prgname%" "%src%\%%p" "%dest%\%%p" %1 %2 %3 %4 %5 %6 %7 %8 %9
)
if "%dest:~-1%"==":" (
set dest=%dest%\
)
:loop
if exist "%src%\%~1" (
md "%dest%" > NUL 2>&1
copy "%src%\%~1" "%dest%"
)
shift
if not "%~1"== "" goto loop
endlocal
Gruß
Friemler
Moin Mädelz,
er will anhand eines nicht genannten Filters Dateien verschieben und nicht kopieren löschen, weil er das innerhalb einer Platte macht und das in kurzer Zeit
laufen soll....
btw: Das Thema scheint vonTO eh schon vergessen worden zu sein - rückfragen werden ja genausowenig beantwortet, wie euere Mühe (in die falsche Richtung)
Gruß
lest doch mal die Frage...
er will anhand eines nicht genannten Filters Dateien verschieben und nicht kopieren löschen, weil er das innerhalb einer Platte macht und das in kurzer Zeit
laufen soll....
btw: Das Thema scheint vonTO eh schon vergessen worden zu sein - rückfragen werden ja genausowenig beantwortet, wie euere Mühe (in die falsche Richtung)
Gruß
Hallo Systemforscher,
in dem Code oben waren noch kleine Fehler. Bei einem Wurzelverzeichnis als Quell- oder Zielpfad hätte es Fehlfunktionen gegeben. Peinlich.
Ich habe kurzerhand eine Anleitung im Bereich Batch & Shell erstellt. Link: Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken
Das Skript dort kann beliebig viele Dateimasken entgegennehmen. Es enthält zum Schluss auch einen Befehl, der leere Verzeichnisse löscht, die während der Abarbeitung entstehen oder schon vorhanden waren. Ob das für Dich sinnvoll ist, musst Du selbst entscheiden.
Gruß
Friemler
in dem Code oben waren noch kleine Fehler. Bei einem Wurzelverzeichnis als Quell- oder Zielpfad hätte es Fehlfunktionen gegeben. Peinlich.
Ich habe kurzerhand eine Anleitung im Bereich Batch & Shell erstellt. Link: Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken
Das Skript dort kann beliebig viele Dateimasken entgegennehmen. Es enthält zum Schluss auch einen Befehl, der leere Verzeichnisse löscht, die während der Abarbeitung entstehen oder schon vorhanden waren. Ob das für Dich sinnvoll ist, musst Du selbst entscheiden.
Gruß
Friemler
Hallo SystemForscher,
freut mich, daß ich Dir helfen konnte.
Berichte doch bitte von Deinem Workaround. Konntest Du eigentlich feststellen, durch welche Zeile die Fehlfunktion bei & hervorgerufen wurde? Vermute mal durch einen SET-Befehl. In dem Skript aus der Anleitung unter Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken müsste das auch behoben sein.
Gruß
Friemler
freut mich, daß ich Dir helfen konnte.
Berichte doch bitte von Deinem Workaround. Konntest Du eigentlich feststellen, durch welche Zeile die Fehlfunktion bei & hervorgerufen wurde? Vermute mal durch einen SET-Befehl. In dem Skript aus der Anleitung unter Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken müsste das auch behoben sein.
Gruß
Friemler
Hallo Systemforscher,
danke für Deine Rückmeldung, hat mir interessante Erkenntnisse gebracht.
Bei sehr langen Pfaden werden die von Dir entfernten Ausdrücke wohl nicht korrekt interpretiert. Tja, ich habe immer wieder den Verdacht, das MS den Interpreter für die Batchskript Sprache von einem Praktikanten programmieren ließ...
Für Deinen Verwendungszweck ist die schnelle Version auch völlig ausreichend. Du nimmst ja nie die Maske *.*, sondern immer so was wie *.txt oder *.log. Ich glaube mittlerweile auch nicht mehr daran, daß die langsame Version notwendig war, denn alle Dateien und Unterverzeichnisse kann move schon von sich aus verschieben und nur bei der Maske *.* und einem Verzeichnis, das keine Dateien sondern nur Unterverzeichnisse enthält, kann die schnelle Version Fehlermeldungen produzieren.
An dem Tag habe ich mehrere Änderungen an dem Skript aus meiner Anleitung unter Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken vorgenommen. Der SET-Fehler bei Pfaden mit dem & Zeichen sollte in der letzten Version behoben sein, wenn nicht, liegt es wieder mal an dem Praktikanten.
Gruß
Friemler
danke für Deine Rückmeldung, hat mir interessante Erkenntnisse gebracht.
Zitat von @SystemForscher:
Ich konnte den Absturz mit diesem Script verhindern indem ich den Backslash Teil aus deinem Batch Script entfernt habe.
Ich konnte den Absturz mit diesem Script verhindern indem ich den Backslash Teil aus deinem Batch Script entfernt habe.
Bei sehr langen Pfaden werden die von Dir entfernten Ausdrücke wohl nicht korrekt interpretiert. Tja, ich habe immer wieder den Verdacht, das MS den Interpreter für die Batchskript Sprache von einem Praktikanten programmieren ließ...
Zitat von @SystemForscher:
Zudem ist das erweiterte Script aus deinem Link sehr langsam,... Fehlermeldungen habe ich bei dem schnelleren Teil
keine erhalten.
Zudem ist das erweiterte Script aus deinem Link sehr langsam,... Fehlermeldungen habe ich bei dem schnelleren Teil
keine erhalten.
Für Deinen Verwendungszweck ist die schnelle Version auch völlig ausreichend. Du nimmst ja nie die Maske *.*, sondern immer so was wie *.txt oder *.log. Ich glaube mittlerweile auch nicht mehr daran, daß die langsame Version notwendig war, denn alle Dateien und Unterverzeichnisse kann move schon von sich aus verschieben und nur bei der Maske *.* und einem Verzeichnis, das keine Dateien sondern nur Unterverzeichnisse enthält, kann die schnelle Version Fehlermeldungen produzieren.
An dem Tag habe ich mehrere Änderungen an dem Skript aus meiner Anleitung unter Verschieben von Verzeichnisbäumen mit MOVE.exe unter Angabe von mehreren Dateimasken vorgenommen. Der SET-Fehler bei Pfaden mit dem & Zeichen sollte in der letzten Version behoben sein, wenn nicht, liegt es wieder mal an dem Praktikanten.
Gruß
Friemler