Windows XP: Ordner via Konsole (cmd) kopieren?

Dieser Thread ist Teil einer Diskussion zu einem Artikel:  Zum News-Artikel gehen

pelle

Aktives Mitglied
Hallo

Da es grad zum Thema passt: Kann mir jemand auf die Sprünge helfen, warum eine Bat-Datei mit dem Inhalt "xcopy c:\test\a c:\test\b /t /e" beim ausführen nicht das Geringste zur Folge hat, währenddem ich beim manuellen Eintippen dieser Zeile ins Cmd-Fenster sehr wohl die leeren Verzeichnisse kopiert kriege?

Windows XP SP2

Herzlichen Dank für eine Rückmeldung
 

pagefault

Inaktiv
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
 

pelle

Aktives Mitglied
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
 

Anhänge

  • XCOPY_Test.jpg
    XCOPY_Test.jpg
    29 KB · Aufrufe: 10

maxcimo

Stammgast
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.
 

maxcimo

Stammgast
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.
 
A

abu

Guest
Super

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

pagefault

Inaktiv
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.
 

pelle

Aktives Mitglied
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
 

maxcimo

Stammgast
Füge am Anfang deines Files folgende Zeile ein:
Code:
@echo off
Dadurch wird die Ausgabe deiner Batch commands auf der Befehlszeile unterdrückt.

Danach kannst du den echo-Befehl verwenden, um Meldungen anzuzeigen ("echo." gibt eine Leerzeile aus):
Code:
echo.
echo Verzeichnisse kopiert
echo.
pause

Du benötigst zwingend ein pause-Befehl am Ende, da ansonsten das Batch-Programm sofort terminiert und die Befehlszeile mit dem output verschwindet.
 

pelle

Aktives Mitglied
WoW!!!

Wahnsinn, hier bekommt man echt extrem schnell Super-Antworten.
So hab ich heut als Batch-Anfänger ja richtig viel gelernt!

Ganz grosses Dankeschön an euch!!

Und für andere blutige Anfänger hier der Inhalt meiner fertigen Datei, vielleicht auch so als Idee, in welche Richtung das gehen könnte: (Das File heisst neu übrigens MSDOS_Xcopy.cmd)

--------

@echo off

REM Erstellt im Zielverzeichnis die Verzeichnisstruktur des Ursprungsverzeichnisses, ohne die Dateien zu kopieren (/t), wobei auch leere Verzeichnisse übernommen werden (/e).

xcopy c:\test\a c:\test\b\ /t /e

echo.
echo.
echo.
echo Die Verzeichnisstruktur wurde kopiert. (PM)
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
pause

-------
 
Oben