viprex
Goto Top

Batch Skript Robocopy unter Windows 7 - Problem mit Pfad und Variable

Hallo,

mit folgendem Skript habe ich mir unter Windows XP eine Möglichkeit gebastelt, bequem Dateien mit Robocopy zu kopieren. Dem Skript wurden dabei einfach nur Quell und Zielpfad mitgeteilt. Hier der Codeschnipsel:

@echo off
@cls

@echo ###############################################################################
@echo #################### Batch Datei zum Kopieren mit Robocopy ####################
@echo ###############################################################################

:Start
@echo -------------------------------------------------------------------------------
@set source=
@set /p source=Bitte Quellpfad eingeben: 
@echo.

@set target=
@set /p target=Bitte Zielpfad eingeben: 
@echo -------------------------------------------------------------------------------
@echo Folgende Pfade wurden bernommen:
@echo. 
@echo Quelle: "%source%"  
@echo.
@echo Ziel: "%target%"  
@echo.

:korrekt
@set /p korrekt=Ist dies korrekt (y/n): 
@if not ´%korrekt%´==´´ set choice=%choice:~0,1%
@if ´%korrekt%´==´y´ goto copy
@if ´%korrekt%´==´n´ goto start
@ECHO "%korrekt%" ist keine gueltige Eingabe!  
@echo.
@goto korrekt

:copy
@echo.
@robocopy "%source%" "%target%" /MIR /R:1 /W:1 /NFL /ETA   
goto end

:end
@echo.
@echo ###############################################################################
@echo ############################## Batch Skript Ende ##############################
@echo ###############################################################################
pause

Leider funktioniert das Skript unter Windows 7 Professional x64 nicht wie gewünscht.

Das Skript liegt an folgendem Speicherort: "W:\Backups\Skripte\robocopy_eingabe.bat"
Rufe ich das Skript mit einem Doppelklick an diesem Ort auf, erhalte ich ein merkwürdiges Ergebnis. Wenn ich als Quelllaufwerk "w:" und als Ziellaufwerk "r:" wähle, kopiert Robocopy den Ort "w:\Backup\Skripte" und nicht den eingegeben Quellpfad "w:"!

f274875d5d42905488328be45fef3768-zwischenablage02

Rufe ich das Skript am selben Ort "(W:\Backup\Skripte\robocopy_eingabe.bat") auf und wähle als Quelle "f:" und als Ziel "q:", funktioniert das Skript wie gewünscht.

0f907c2e9d3a62076e1e3693877923f8-zwischenablage03

Kann sich jemand erklären, warum das so ist? Klar kann ich in diesem einem Fall auch die robocopy Zeile in der Kommandozeile eingeben, mich interessiert aber, warum das Skript hier querschießt.

BTW: Ich weiß nichtmal wirklich, ob es an Windows 7 liegt, da ich das Skript jetzt nicht unter XP testen kann. Falls es kein Windows 7 Problem ist (wovon ich jetzt mal ausgehe), würde ich gerne wissen, warum die Kommandozeile da so einen Schlenker macht.

Vielen Dank für eure Hilfe!

Content-ID: 128833

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

Ausgedruckt am: 14.11.2024 um 23:11 Uhr

bastla
bastla 06.11.2009 um 20:51:48 Uhr
Goto Top
Hallo Viprex!

"W:" ist keine Pfad-, sondern nur eine Laufwerksangabe - wenn Du "W:\" meinst, musst Du es auch so eingeben.

Dass nicht automatisch der Root-Ordner des Laufwerkes verwendet wird, liegt daran, dass für jedes Laufwerk ein (eigener) "aktueller" Pfad verwaltet wird - das lässt sich leicht nachvollziehen, wenn Du an der Kommandozeile (von C:\ aus) eingibst:
C:\>cd W:\Backups
C:\>dir W:
Mit dem ersten Befehl änderst Du auf Laufwerk W: den (dort) aktuellen Pfad, wechselst aber nicht zu diesem Laufwerk (dazu müsstest Du "cd /d" oder "pushd" verwenden).
Beim "dir"-Befehl ist dann auf dem Laufwerk W: bereits der "Backup"-Ordner aktuell und es wird (da Du keine explizite Pfadangabe, sondern eben nur eine Laufwerksangabe, verwendet hast) dessen Inhalt angezeigt.

Wurde vorher noch keine Änderung des aktuellen Pfades vorgenommen (wie es in Deinem Beispiel bei "f:" und "q:" der Fall gewesen sein muss), wird tatsächlich jeweils der Root-Ordner (also zB "f:\") verwendet.

Grüße
bastla
GabbaGandalf
GabbaGandalf 25.07.2013 um 09:19:18 Uhr
Goto Top
Hallo,

ich bin auf der Suche nach einem guten Robocopy-Batch-Script. Das vom Threadersteller erstellte Script sieht schon ziemlich gut aus, allerdings laufe ich in den selben Fehler.

Frage: Wäre folgendes möglich?

Statt
@robocopy "%source%" "%target%" /MIR /R:1 /W:1 /DCOPY:T

das hier:
@robocopy "%source%":\ "%target%":\ /MIR /R:1 /W:1 /DCOPY:T

Dann müsste man ja ja sozusagen nur den reinen Laufwerksbuchstaben d oder e oben eingeben.

Kanns gerade nicht testen, würde aber doch funktionieren, oder?

Nutzt ihr weitere Parameter beim Robocopy-Script? Ich möchte halt den Inhalt von meiner Datenfestplatte 1zu1 kopieren. Inkl. Timestamps etc.
Viprex
Viprex 25.07.2013 um 10:55:51 Uhr
Goto Top
Hallo,

ich setze das obige Skript noch immer ein und habe es eben nochmal schnell modifiziert, indem ich vorm robocopy Befehl direkt auf das Laufwerk wechsel.

@echo off
@cls

@echo ###############################################################################
@echo #################### Batch Datei zum Kopieren mit Robocopy ####################
@echo ###############################################################################

:Start
@echo -------------------------------------------------------------------------------
@set source=
@set /p source=Bitte Quellpfad eingeben: 
@echo.
@set target=
@set /p target=Bitte Zielpfad eingeben: 
@echo -------------------------------------------------------------------------------
@echo Folgende Pfade wurden bernommen:
@echo. 
@echo Quelle: "%source%"  
@echo.
@echo Ziel: "%target%"  
@echo.
@goto korrekt

:korrekt
@set /p korrekt=Ist dies korrekt (y/n): 
@if not ´%korrekt%´==´´ set choice=%choice:~0,1%
@if ´%korrekt%´==´y´ goto copy
@if ´%korrekt%´==´n´ goto start
@echo "%korrekt%" ist keine gueltige Eingabe!  
@echo.
@goto korrekt

:copy
@echo.
@set drive=%source:~0,2%
@%drive%
@robocopy "%source%" "%target%" /MIR /R:1 /W:1 /NFL /ETA   
@goto end

:end
@echo.
@echo ###############################################################################
@echo ############################## Batch Skript Ende ##############################
@echo ###############################################################################
@pause

Durch die Anweisung @%drive% habe ich versucht, erst auf das entsprechende Laufwerk zu wechseln und robocopy damit korrekt anzuweisen. Weiß gerade nicht, ob es auch mit Laufwerken klappt (habe auch keine freien Laufwerke zum Testen zur Verfügung).
Vielleicht kannst du es ja testen indem du einfach z. B. E: als Quelle und D: als Ziel einträgst. Bin gespannt obs funktioniert und würde mich über eine kurze Rückmeldung freuen face-smile
bastla
bastla 25.07.2013 um 19:37:47 Uhr
Goto Top
Hallo Viprex!
Durch die Anweisung @%drive% habe ich versucht, erst auf das entsprechende Laufwerk zu wechseln
Was hat dich denn an den beiden Varianten
cd /d
bzw
pushd
popd
gestört? Abgesehen davon ist das Wechseln auf das entsprechende Quell-Laufwerk nicht nötig, wenn der Quellpfad korrekt ist, was Du ja einfach mit einem
if exist "%source%"
vorweg prüfen kannst ...

Grüße
bastla

BTW: Das "@echo off" am Anfang des Batches macht die "@" an den jeweiligen Zeilenanfängen entbehrlich (bzw kontraproduktiv, wenn Du während der Testphase per "@echo on" die einzelnen Anweisungen vor der Ausführung auch anzeigen lassen willst) ...
Viprex
Viprex 27.07.2013 um 12:53:03 Uhr
Goto Top
Moin Bastla,

gestört hat mich gar nichts, ich habe nur in der Eile auf das zurückgegriffen, was ich kannte. Ich werde bei Gelegenheit mal deine Befehle probieren. Insbesondere kann die kurze Quellpfad Prüfung ja nochmal eingebaut werden.
Evtl. habe ich auch noch nicht ganz raus, welcher Befehl in welchem Kontext der richtige ist und welchen Pfad ändert. ich schaue mir das evtl. nochmal an.

Bzgl. der echo off Thematik. stimmt schon, ist mir auch bewusst. Ich hatte mir das nur irgendwann mal angewöhnt immer ein @ am Anfang der Zeile zu setzen. Mache mir da wohl zu viel Arbeit. Ist ja aber auch nicht so wild.
Jedenfalls vielen Dank für die Tipps!