kilrathi
Goto Top

ROBOCOPY - Ordner verschieben, nicht Ordnerinhalt

Hallo zusammen,

simple Frage aber ich bin irgendwie zu blöd um auf die Lösung zu kommen:

robocopy C:\Temp\A D:\Temp /e /move .....

Wenn ich den ganz normalen robocopy Befehl eingebe wird ja der Inhalt des Ordners A nach D:\Temp kopiert.
Wie kann ich es umschreiben, damit nicht der Inhalt des Ordners A, sondern der komplette Ordner verschoben wird.
Ziel ist es das Ordner A von C:\Temp nach D:\Temp wandert.

Hintergrund: Auf C:\ muss Platz geschaffen werden und deshalb soll der Ordner (und diverse Andere) von C:\ nach D:\
Dabei darf kein neuer Ordner A angelegt werden, da auf dem ursprünglichen Ordner Freigaben laufen und bestimmte Berechtigungen gesetzt sind.

Danke für die Hilfe
Kilrathi

Content-Key: 380507

Url: https://administrator.de/contentid/380507

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: Kraemer
Kraemer 17.07.2018 aktualisiert um 17:00:34 Uhr
Goto Top
Moin,

die Berechtigungen sind weniger das Problem - die Freigaben explodieren imho allerdings.

Gruß

Edit: Blödsinn entfernt
Mitglied: Penny.Cilin
Penny.Cilin 17.07.2018 um 16:59:38 Uhr
Goto Top
Hallo,

willst Du jetzt den Ordner C:\Temp\A verschieben oder nur die anderen?
Wenn Ordner A nicht verschoben werden soll, dann schau Dir mal den Parameter /XD an.

Mache doch ganz einfach einen Test, indem Du zudem die Parameter /tee /log:C:\robocopy.log einsetzt.
Somit kannst Du den Verschiebevorgang protokollieren.

Gruss Penny
Mitglied: kilrathi
kilrathi 17.07.2018 um 17:14:34 Uhr
Goto Top
Ich will den Ordner C:\Temp\A verschieben

Quasi das gleiche wie markieren - Strg X und dann auf D:\Temp Strg V ...
Mitglied: Penny.Cilin
Penny.Cilin 17.07.2018 um 17:20:53 Uhr
Goto Top
Ja und hast Du mal mittels den Parametern
/L /Tee /log:C:\robocopy.log
den Verschiebevorgang simuliert?
Und hast Du Dir mal die Hilfe von Robocopy genau angeschaut?
Hast Du mal mit Testverzeichnissen experimentiert?

Sind unter C:\Tempauch andere Verzeichnisse, welche NICHT verschoben werden sollen?

Mal kurz mit einem Testverzeichnis testen kann doch nicht soooooo schwer sein.

Gruss Penny
Mitglied: NetzwerkDude
NetzwerkDude 17.07.2018 aktualisiert um 17:32:46 Uhr
Goto Top
rsync nehmen face-smile

dort wird es über die slashes am ende des pfades bestimmt:
https://wiki.ubuntuusers.de/rsync/#Vorab-zur-Syntax

Kannst es ja über das Linux Subsystem for Windows installieren, dann hat man das Windows Filesystem + die Linux Kommandozeilentools in einer umgebung
Mitglied: kilrathi
kilrathi 17.07.2018 um 18:29:33 Uhr
Goto Top
Natürlich hab ich es getestet... in diversen Variante. Mit Slash am Ende also C:\Temp\A\ .. ohne Slash ... mit diversen Parametern usw.
Ist ja nicht so, dass ich robocopy zum Ersten Mal verwende.

Bisher wars nur immer relativ simpel, da ich im Ziel die Ordner erstellt habe, in die ich dann den Inhalt der Quell Ordner kopieren konnte....

Muss doch irgendwie machbar sein.

Und ja ich C:\Temp (dient übrigens nur als Beispiel) sind auch Ordner die nicht verschoben werden sollen. Ansonsten hätte ich nämlich C:\Temp also den Inhalt (z.B. A) verschieben können
Mitglied: kilrathi
kilrathi 17.07.2018 um 18:30:30 Uhr
Goto Top
Leider nicht möglich. Ist eine Server Umgebung und ich habe beschränkten Zugriff
Mitglied: NetzwerkDude
NetzwerkDude 17.07.2018 um 18:59:19 Uhr
Goto Top
Mitglied: kilrathi
kilrathi 18.07.2018 um 07:53:07 Uhr
Goto Top
Mit Move-Item werden die Freigaben entfernt. Das ist auch nicht so prickelnd =/
Mitglied: AndreasHoster
AndreasHoster 18.07.2018 um 09:35:11 Uhr
Goto Top
Die Freigaben werden immer entfernt, wenn es den Zielordner nicht mehr gibt.
Die wirst Du wohl oder übel neu definieren müssen.
Was jetzt aber auch kein großer Aufwand ist, wenn man die Rechte dazu hat.
Ansonsten geht's halt nicht.
Mitglied: rubberman
Lösung rubberman 18.07.2018 um 10:09:33 Uhr
Goto Top
Du kannst A nicht verschieben wenn du A angegeben hast. So funktioniert Robocopy leider nicht. Wenn, müsstest du mit dem übergeordneten Verzeichnis agieren und per /XD und /XF alles ausschließen, was sich sonst noch in diesem Verzeichnis befindet. Das ließe sich automatisiert in eine .RCJ Datei schreiben, die du Robocopy als Job übergibst. Falls du Interesse hast, kann ich heute Abend dazu ein paar Scriptzeilen schreiben...

Steffen
Mitglied: kilrathi
kilrathi 18.07.2018 um 13:04:23 Uhr
Goto Top
Ich denke mit /XD komme ich meinem Ziel noch am Nähsten. Die Freigaben auf die verschobenen Ordner muss ich dann eben wieder aufsetzen und die DFS-N Verknüpfungen auch.

Danke euch allen erstmal face-smile
Mitglied: rubberman
rubberman 18.07.2018 um 13:31:29 Uhr
Goto Top
Achtung, gib den vollen Pfad der auszuschließenden Verzeichnisse und Dateien an. Anderenfalls werden rekursiv alle gefundenen Dateien und Ordner mit gleichem Name ausgeschlossen, falls diese im zu verschiebenden Verzeichnis zufällig ebenfalls existieren sollten.

Steffen
Mitglied: rubberman
rubberman 18.07.2018 um 17:45:25 Uhr
Goto Top
Probier mal ob das so funktioniert.

Steffen

*.bat
@echo off &setlocal DisableDelayedExpansion
:: für den Fall dass du mit erhöhten Rechten ausführst (was /COPY:DATSU sicherlich erfordert) ...
cd /d "%~dp0"  

:: Quelle, Ziel und Jobname
set "src=C:\Temp\A"  
set "dst=D:\Temp"  
set "job=test"  


set "job_f=%~dp0%job%.RCJ"  
for %%i in ("%src%") do (set "p=%%~dpi" &set "d=%%~nxi")  
>"%job_f%" type nul  
setlocal EnableDelayedExpansion
>>"!job_f!" echo /SD:!p!  
>>"!job_f!" echo /DD:!dst!\  
endlocal


:: Spezifiziere deine Optionen hier
>>"%job_f%" echo /S  
>>"%job_f%" echo /E  
>>"%job_f%" echo /MOVE  
>>"%job_f%" echo /COPY:DATSU  
>>"%job_f%" echo /R:1  
>>"%job_f%" echo /W:1  

:: alle Ordner im übergeordneten Verzeichnis ausschließen, bis auf den zu verschiebenden
>>"%job_f%" echo /XD  
for /f "delims=" %%i in ('dir /ad /b "%p%"') do (  
  if /i "%%i" neq "%d%" (  
    set "x=%p%%%i"  
    setlocal EnableDelayedExpansion
    >>"!job_f!" echo !x!  
    endlocal
  )
)
:: alle Dateien im übergeordneten Verzeichnis ausschließen
>>"%job_f%" echo /XF  
for /f "delims=" %%i in ('dir /a-d /b "%p%"') do (  
  set "x=%p%%%i"  
  setlocal EnableDelayedExpansion
  >>"!job_f!" echo !x!  
  endlocal
)

:: Robocopy mit dem erstellten Job starten.
robocopy /job:"%job%"  
pause