Tipps & Tricks 11.02.2008, 17:49 Uhr

Windows XP: Ordner via Konsole (cmd) kopieren?

Problem: Ich versuche per Kommandozeile (cmd) mit xcopy einen Ordner auf ein anderes Laufwerk zu kopieren. Aber ich erhalte bei der Eingabe des Befehls dauernd Fehlermeldungen wie «Unzulässige Parameterzahl» oder «System kann die angegebene Datei nicht finden». Wie mache ich das, damit es klappt?
Lösung: Per Konsole (Start/Ausführen, Eingabe von cmd) einen Ordner zu kopieren, kann sehr praktisch sein. Denn ein solcher Kopierbefehl lässt sich auch in eine Batch-Datei schreiben.
Im Prinzip lautet der Befehl zum Kopieren eines Ordners «xcopy /S Quellverzeichnis Zielverzeichnis». Wenn Sie in der Konsole einmal xcopy /? eintippen, finden Sie zudem noch viele Schalter, die Sie zusätzlich mitliefern könnten. Die wahrscheinlich wichtigsten:
/S kopiert Ordner und Unterordner, die nicht leer sind
/E kopiert Ordner und Unterordner, auch wenn sie leer sind
/Y damit Windows nicht fragt, ob ggf. bestehende Dateien überschrieben werden sollen (ev. heikel!)
/C kopiert weiter, auch wenn Fehler auftreten
/D kopiert nur Dateien, die neuer sind als jene, die schon im Zielordner liegen
Nun zum Grund, warum bei Ihnen Fehler auftreten, wenn Sie den Befehl eintippen. Vermutlich versuchen Sie einen Ordner zu kopieren, in dessen Pfad mindestens ein Leerzeichen vorkommt. Häufige Beispiele hierfür sind unter Windows XP etwa die Ordner «Dokumente und Einstellungen» oder «Eigene Dateien».
Setzen Sie die Quell- oder Zielangabe immer in Anführungs- und Schlusszeichen ("c:\mein ordner"), wenn ein Leerzeichen in Sicht ist:
Damit sollte dem Kopieren nichts mehr im Weg stehen. Probieren Sie den Befehl am besten zuerst mit Testverzeichnissen aus, bis Sie ein paar Erfahrungen gesammelt haben. Zu schnell sind das falsche Verzeichnis mit Mülldaten überflutet oder wichtige Dateien überschrieben. Ein «Rückgängig» gibt es bei diesen Konsolenbefehlen nicht. (PCtipp-Forum)



Kommentare
Avatar
pagefault
11.02.2008
Versuch mal, den Zielpfad mit einem \ zu beenden; damit unterbleibt eine allfällige Rückfrage, ob es sich beim Ziel um eine Datei oder ein Verzeichnis handele, falls es das Zielverzeichnis noch nicht gibt. also: xcopy c:\test\a c:\test\b\ /t /e

Avatar
pelle
12.02.2008
Hi pagefault Danke für den Hinweis. Leider nützt es wenig. Auch ein zusätzlicher Backslash nach dem Quellverzeichnis hilft nicht. Weiterhin sehe ich nach dem Doppelklick auf die Bat-Datei das CMD-Fenster aufgehen und darin sich dauernd wiederholend die gleichen Zeilen "C:\Test>xcopy c:\test\a\ c:\test\b\ /t /e" durchlaufen, bis ich auf Pause drücke. Bin dankbar um weitere Hilfestellungen. Gruss Pelle

Avatar
maxcimo
12.02.2008
Hi pelle, Dein xcopy Befehl sieht eigentlich gut aus aus ... Kann es sein, dass du dein Batch-File "xcopy.bat" nennst? Weil in diesem Fall wird xcopy sich selbst wieder aufrufen (der xcopy-Befehl in deinem Batch-File ruft immer wieder dein eigenes xcopy.bat auf) -> endlose Rekursion Workaround: Batch-File umbenennen :-) gruss, m.

Avatar
POGO 1104
12.02.2008
Kann es sein, dass du dein Batch-File "xcopy.bat" nennst?...DAS nenn ich mal einen guten Gedanken! könnte durchaus sein. An dieser Stelle mal ne kurze Zwischenfrage: Spielt es eine Rolle, ob man ein Batchfile *.bat oder *.cmd nennt? was ist der Umterschied? gruss, o.s.t.

Avatar
maxcimo
12.02.2008
An dieser Stelle mal ne kurze Zwischenfrage: Spielt es eine Rolle, ob man ein Batchfile *.bat oder *.cmd nennt? was ist der Umterschied? Wenn du ein Script-File mit Rückwärtskompatibilität zu Windows 9x schreiben möchtest, musst du die .bat Endung benutzen (Win 9x kennt keine .cmd Files!). Zu beachten ist dann, dass das Batch-File mit einem 16bit MS-DOS Command Interpreter (command.com) abgearbeitet wird ... im Gegensatz zum neueren 32bit Windows Command Interpreter (cmd.exe). Ab Windows NT+ spielt es aber eigentlich keine Rolle mehr, ob du deine Script-Files mit der Endung .bat oder .cmd versiehst. Beide werden grundsätzlich gleich verarbeitet (cmd.exe). Unter gewissen (mir unbekannten) Umständen kann es aber trotzdem sein, dass eine .bat Datei in der emulierten DOS-Umgebung (command.com) ausgeführt wird -> führt zu nicht nachvollziehbaren Fehlermeldungen :S Mit der .cmd Endung kannst du das verhindern. ... lange Rede, kurzer Sinn: Wenn du keine Rückwärtskompatibilität benötigst dann verwende .cmd (damit stellst du auch sicher, dass dir alle Befehle zur Verfügung stehen). Wenn dein Script aber auch unter Win 9x laufen soll, dann verwende .bat und stelle sicher, dass die Datei auch unter Win NT mit command.com ausgeführt wird.

Avatar
POGO 1104
12.02.2008
@maxcimo DAS nenn ich aber mal ne super Erklärung! besten Dank :) gruss, o.s.t.

Avatar
abu
12.02.2008
Super @maxcimo: Super Beschreibung, Danke! Ich habe meine bereits begonnene daraufhin gecancelt.

Avatar
maxcimo
12.02.2008
keine Ursache :)

Avatar
pagefault
12.02.2008
Unter gewissen (mir unbekannten) Umständen kann es aber trotzdem sein, dass eine .bat Datei in der emulierten DOS-Umgebung (command.com) ausgeführt wird -> führt zu nicht nachvollziehbaren Fehlermeldungen :S Mit der .cmd Endung kannst du das verhindern. Genau :) - Danke für die ausführliche Erklärung! Bleibt nur noch nachzutragen, dass bei gleichem Script-Namen in der Regel .bat vor .cmd ausgeführt wird. Will heissen, demo.bat wird vor bzw anstelle von demo.cmd ausgeführt, wenn beide Dateien im gleichen Verzeichnis stehen und man einfach demo eingibt. Die vollständige Ausführungsreihenfolge steht in der Umgebungsvariablen PATHEXT. Sie kann in der Eingabeaufforderung über "set pathext" sichtbar gemacht werden und in den Systemeigenschaften - Erweitert - Umgebungsvariablen (oder direkt in der Registry) geändert werden.

Avatar
pelle
13.02.2008
Hi Maxcimo Na klar. War dann wohl eher etwas dümmlich meinerseits. Die Ausführungsdatei umbenannt (nicht mehr xcopy.bat) und schon gings einwandfrei. Herzlichen Dank fürs genaue Hingucken und die Lösung! Doch es kommt gleich die nächste Frage. Ich hatte nämlich ursprünglich noch eine Abschlussmeldung vorgesehen und nahm dafür den Befehl echo zur Hilfe. -> Die Funktion xcopy wird ohne Probleme ausgeführt, doch danach verschwindet das CMD-Fenster wieder im Nu. Erst ein zusätzlich eingebauter PAUSE-Befehl liess das Fenster dann stehen. Nun konnte ich aber alle Befehlszeilen inkl. vorgängiger REM-Zeilen lesen. Eigentlich wäre aber nur ein kurzer Text im Sinne von "Verzeichnisse kopiert" erwünscht gewesen. Wie funktioniert der echo-Befehl? Ich hatte irgendwie die naive Hoffnung, dass damit unabhängig vom CMD-Fenster ein weiteres Fenster aufgeht mit auschliesslich der entsprechenden Meldung. Gibt es dafür eine Möglichkeit? Gruss Pelle