Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Robocopy - ECHTES verschieben möglich?

Frage Microsoft Windows Tools

Mitglied: SystemForscher

SystemForscher (Level 1) - Jetzt verbinden

15.07.2010, aktualisiert 18.10.2012, 11643 Aufrufe, 12 Kommentare

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?


Mit freundlichen Grüßen
Mitglied: 60730
15.07.2010 um 16:31 Uhr
moin,

Ist es möglich mit Robocopy oder einem vergleichbaren CMD Tool, Dateien auf einer HD zu verschieben?
Theologisch gesehen Jein
Der 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 PsychaterinKristallkugel mir fehlt auch was, das ich zum beantworten benötige
Da die Dame/Kugel meistens Recht hat - bist du jetzt dran.

gruß
Bitte warten ..
Mitglied: heparus
15.07.2010 um 21:55 Uhr
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
Bitte warten ..
Mitglied: Friemler
16.07.2010 um 15:18 Uhr
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:

01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set src=%~1 
06.
set dest=%~2 
07.
 
08.
if "%src:~-1%"=="\" ( 
09.
  set src=%src:~0,-1% 
10.
11.
 
12.
if "%dest:~-1%"=="\" ( 
13.
  set dest=%dest:~0,-1% 
14.
15.
 
16.
for /f "delims=" %%p in ('dir "%src%\" /b /-p /a:d 2^>NUL') do ( 
17.
  call "%~0" "%src%\%%p" "%dest%\%%p" %3 
18.
19.
 
20.
if "%dest:~-1%"==":" ( 
21.
  set dest=%dest%\ 
22.
23.
 
24.
if exist "%src%\%~1" ( 
25.
  md "%dest%" > NUL 2>&1 
26.
  copy "%src%\%~1" "%dest%" 
27.
28.
 
29.
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
Bitte warten ..
Mitglied: Friemler
16.07.2010 um 15:49 Uhr
Hallo SystemForscher,

hier noch eine Version, die auch mehrere Dateimasken zulässt:

01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
set prgname=%~0 
06.
set src=%~1 
07.
set dest=%~2 
08.
 
09.
if "%src:~-1%"=="\" ( 
10.
  set src=%src:~0,-1% 
11.
12.
 
13.
if "%dest:~-1%"=="\" ( 
14.
  set dest=%dest:~0,-1% 
15.
16.
 
17.
shift 
18.
shift 
19.
 
20.
for /f "delims=" %%p in ('dir "%src%\" /b /-p /a:d 2^>NUL') do ( 
21.
  call "%prgname%" "%src%\%%p" "%dest%\%%p" %1 %2 %3 %4 %5 %6 %7 %8 %9 
22.
23.
 
24.
if "%dest:~-1%"==":" ( 
25.
  set dest=%dest%\ 
26.
27.
 
28.
:loop 
29.
  if exist "%src%\%~1" ( 
30.
    md "%dest%" > NUL 2>&1 
31.
    copy "%src%\%~1" "%dest%" 
32.
33.
 
34.
  shift 
35.
if not "%~1"== "" goto loop 
36.
 
37.
endlocal
Gruß
Friemler
Bitte warten ..
Mitglied: 60730
16.07.2010 um 16:11 Uhr
Moin Mädelz,

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ß
Bitte warten ..
Mitglied: Friemler
16.07.2010 um 16:46 Uhr
Moin,

LES' DOCH MAL DEN TEXT...

Er braucht doch nur COPY gegen MOVE zu tauschen, schon funktionierts. Und wer hier irgendwas vergisst, weißt Du bestimmt nicht.

Gruß
Bitte warten ..
Mitglied: SystemForscher
18.07.2010 um 13:53 Uhr
Hallo!

Ich war die Tage untewegs und konnte nicht gleich Antworten, sorry.

Das mit der "Filteroption" war wohl etwas zu kryptisch, sorry TimoBeil.
In diesen Verzeichnissen befinden sich auch Dateien, die NICHT verschoben werden sollen (z.B. .txt; .LOG). Es sollen nur bestimmte Dateiendungen verschoben werden, welche man mit ROBOCOPY hervoragend definieren kann. XCOPY und andere Win7 Systemprogramme können dies nicht. Ausser "MOVE" Verschiebt kein CMD Systemprogramm WIRKLICH die Dateien, sondern kopiert sie und löscht hinterher die Dateien. Das macht in meinem Fall keinen Sinn, da ich wirklich auf den geschwindigkeits Vorteil angewiesen bin.

Die Scripts von Friemler sehen vielversprechend aus, ich werde sie später Testen. Vielen Dank, schon mal im voraus, falls sie funktionieren sollten =)


Mit freundlichen Grüßen
Bitte warten ..
Mitglied: Friemler
18.07.2010, aktualisiert 18.10.2012
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: http://www.administrator.de/wissen/verschieben-von-verzeichnisb%c3%a4um ...

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
Bitte warten ..
Mitglied: SystemForscher
19.07.2010 um 18:58 Uhr
Hallo!

Das 2. Script von Friemler tut genau das was ich brauche. VIELEN, VIELEN DANK!
Einfach COPY mit MOVE ersetzen und die Dateien werden verschoben. Ich bin dir sehr dankbar für dieses einfache und geniale Script. Es wundert mich das MS diese verschiebe Option nicht auch in Robocopy eingebaut hat.

Ja ein Fehler ist mir auch aufgefallen. Wenn in einerm der Unterverzeichnisse ein "&" enhalten war konnte dieser Pfad nicht richtig ausgeführt werden. Es erschien "konnte befehl "yxz & abc" nicht finden.
Aber da dies nur in ein paar Pfaden aufgetreten ist, konnte ich ein workaround machen.

Den verbesserten Script aus deinem Link werde nacher testen. Feedback dazu gebe ich dir später.

Noch eine kleine Frage: wenn eine Batchdatei mit Administrationsrechten gestartet wird und darin mit einem CALL ein 2. Script aufgerufen wird, besitzt dieses 2. Script dann auch Adminrechte?

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: Friemler
19.07.2010, aktualisiert 18.10.2012
Hallo SystemForscher,

freut mich, daß ich Dir helfen konnte.

Das Zeichen & in Verzeichnis- oder Dateinamen ist deshalb ein Problem, weil es ein Operator der Batchskript-Sprache ist. Es dient der Verkettung von Befehlen (z.B. set var=x & echo %var%). Zweimal hintereinander geschrieben (&&) bewirkt es, daß der zweite Befehl nur dann ausgeführt wird, wenn der erste erfolgreich abgearbeitet wurde. Das Pipezeichen zweimal hintereinander (||) bewirkt, das der zweite Befehl nur ausgeführt wird, wenn der erste NICHT erfolgreich war. Die Zeichen(kombinationen) |, >, <, >>, <<, ' und "dürften auch Probleme machen, wenn sie Teil eines Verzeichnis-/Dateinamens sind.

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 http://www.administrator.de/wissen/verschieben-von-verzeichnisb%c3%a4um ... müsste das auch behoben sein.

Gruß
Friemler
Bitte warten ..
Mitglied: SystemForscher
21.07.2010, aktualisiert 18.10.2012
Hallo!
Du wirst lachen, der Workaround besteht einfach nur aus einer manuellen Umbenennung der betroffenen Pfade =)

Das Erweiterte Script aus dem Link hat das Problem, dass durch überlange Pfade der Script und die aufrufende Batchdatei abstürzt.
Ich konnte den Absturz mit diesem Script verhindern indem ich den Backslash Teil aus deinem Batch Script entfernt habe.

Hier der Code den ich entfernt habe damit der Script nicht abstürzt. Es müssen beide Teile entfernt werden, damit es funktioniert.

[code]

:: evtl. Backslash als letztes Zeichen von src und dest entfernen

if "%src:~-1%"=="\" (
set src=%src:~0,-1%
)

if "%dest:~-1%"=="\" (
set dest=%dest:~0,-1%
)

:: Wenn dest ein Wurzelverzeichnis ist, Backslash wieder anhängen

if "%dest:~-1%"==":" (
set dest=%dest%\
)
[/code]

Beim 2. Script von dieser Seite werden die überlangen Pfade zwar nicht Verschoben, aber das Script und Batch kann wenigstens weiter ausgeführt werden. Beim 2. Script werden die überlangen
Pfade einfach übergangen. Das ist zwar unschön, aber für meine Zwecke ausreichend.

Zudem ist das erweiterte Script aus deinem Link sehr langsam, (also der Teil mit der FOR-Schleife), deshalb habe ich diesen FOR Teil entfernt und verwende jetzt den oberen, schnelleren Teil. Bei
Pfaden mit vielen Verzweigungen ist der Unterschied deutlich erkennbar. Fehlermeldungen habe ich bei dem schnelleren Teil keine erhalten.


[quote]
Berichte doch bitte von Deinem Workaround. Konntest Du eigentlich feststellen, durch welche Zeile die Fehlfunktion bei & hervorgerufen wurde? Vermute mal durch einen SET-Befehl.
[/quote]
Richtig, es ist der Set befehl. Ich habe die move-Zeile mit gelogt ">" . In der Letzt zeile des Logs sind vor dem "SET..." 2 Leerzeichen und im Pfadname fehlt 1 Buchstabe.



Mit freundlichen Grüßen

PS: meine tests beziehen sich auf die Version vom 19.07 http://www.administrator.de/wissen/verschieben-von-verzeichnisb%c3%a4um ...
Bitte warten ..
Mitglied: Friemler
25.07.2010, aktualisiert 18.10.2012
Hallo Systemforscher,

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.

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.

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.

Zitat von SystemForscher:
PS: meine tests beziehen sich auf die Version vom 19.07

An dem Tag habe ich mehrere Änderungen an dem Skript aus meiner Anleitung unter http://www.administrator.de/wissen/verschieben-von-verzeichnisb%c3%a4um ... 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
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Windows Netzwerk
Kein RDP über VPN per MS-TSC möglich (9)

Frage von survial555 zum Thema Windows Netzwerk ...

Microsoft
Keine Anmeldung mehr möglich (Server 2012 R2) (4)

Frage von Shnuuu zum Thema Microsoft ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...