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:
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:"!
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.
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!
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:"!
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.
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128833
Url: https://administrator.de/contentid/128833
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
5 Kommentare
Neuester Kommentar
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:
Mit dem ersten Befehl änderst Du auf Laufwerk W: den (dort) aktuellen Pfad, wechselst aber nicht zu diesem Laufwerk (dazu müsstest Du "
Beim "
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
"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:
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
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.
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.
Hallo Viprex!
bzw
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
vorweg prüfen kannst ...
Grüße
bastla
BTW: Das "
Durch die Anweisung @%drive% habe ich versucht, erst auf das entsprechende Laufwerk zu wechseln
Was hat dich denn an den beiden Variantencd /d
pushd
popd
if exist "%source%"
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) ...