Anzeige

Am Puls von Microsoft

Anzeige

[gelöst] mit Xcopy relativen Pfad kopieren

o0Julia0o

gehört zum Inventar
hi :) wie kann ich mit xcopy einen relativen Pfad kopieren?

Verzeichnisstruktur:
D:\Ordner\datei.dat
D:\Ordner\data\daten1

Ich befinde mich beim Ausführen der BAT-Datei(Batch.bat) im Ordner D:\Ordner

So versuche ich es die ganze Zeit:
xcopy /Q /C /H /R /Y datei.dat \data\daten1

Ergebnis:
Windows kopiert die Datei nach:
D:\data\daten1
Ich möchte sie aber in D:\Ordner\data\daten1

wie geht das jetzt?

lieben dank :)

Julia
 
Zuletzt bearbeitet:
Anzeige
Hallo Julia,

ich nehme an, im CMD-Fenster steht folgender Eingabe-Prompt:

D:\Ordner>_

dann lautet der xcopy-Befehl:

xcopy /Q /C /H /R /Y datei.dat D:\Ordner\data\daten1

Bei Deiner Eingabe interpretiert der Command.com den führenden Backslash \ als Verweis auf das Stammverzeichnis und legt daher data\daten1 direkt unter D:\ an.

Stammverzeichnis

Grüße
 
danke - ja, ich befinde mich beim Ausführen der BAT-Datei in D:\Ordner

Jedoch ist deine Lösung absolut, ich benögite eine relative Lösung. Also wenn ich den Ordner "D:\Ordner" z.B. nach E:\Ordner1\Ordner2 verschiebe, dann soll die Batch-Datei immer noch funktionieren. Dann sähe der Pfad ja plötzlich so aus:
Code:
D:\Ordner1\Ordner2\Ordner\Batch.bat
 
Hier solltest du einfach einen Backslash, der immer auf's Root-Verzeichnis führt, weglassen.
xcopy /Q /C /H /R /Y datei.dat \data\daten1
 
aaaah, das funktioniert :) Wie kann ich xcopy sagen, dass es sich um eine Datei handelt... der fragt immer nach "Datei oder Verzeichnis?".
 
Hallo Julia,

kapiere ich das jetzt richtig?

Die Datei "datei.dat" soll immer aus dem aktuellen Verzeichnis in dort "anzuhängendes" Unterverzeichnis namens data\daten1 kopiert werden?

Also z.B. von D:\Ordner1\Ordner2\Ordner nach D:\Ordner1\Ordner2\Ordner\data\daten1 ?

Wenn ja, ist der Tipp von DataRebell genau richtig. Ohne führenden Backslash fügt xcopy den Zielpfad an das aktuelle Verzeichnis an!

Grüße
 
Einfach hinten ans Ziel einen Backslash setzen!

xcopy /Q /C /H /R /Y datei.dat data\daten1\

Damit "weiß" xcopy, dass Du ein Verzeichnis anlegen willst und nicht etwa eine Datei ohne Extension.

Gruß

Gruß
 
Dazu muss nur noch die zu kopierende Datei/en angegeben werden. (datei.dat)
Hier helfen auch diverse Platzhalter, die für copy/move -Befehle akzeptiert werden.. "*" + "?" .. falls der genaue Name der zu kopierenden Dtei sich ändert..
 
xcopy /Q /C /H /R /Y datei.dat data\daten1\

Damit "weiß" xcopy, dass Du ein Verzeichnis anlegen willst und nicht etwa eine Datei ohne Extension.
Danke euch, DataRebell & Zimmermannsohn.
hmm... also damit weiß xcopy, dass es eine Datei kopiert & kein Verzeichnis erstellen soll. Genau das möchte ich aber :) Somit wird die dati.dat in den Ordner D:\Ordner\data\daten1 kopiert.

Also ob ich es so oder so mache, macht keinen Unterschied:
"xcopy /Q /C /H /R /Y datei.dat data\daten1\"
"xcopy /Q /C /H /R /Y datei.dat data\daten1"
In beiden Fällen wird eine Datei names datei.dat nach "D:\Ordner\data\daten1" kopiert.

Ich hatte nur gehofft, dass er die Datei dann auch direkt richtig benennt, wenn ich es so mache:
xcopy /Q /C /H /R /Y datei.dat data\daten1\dateiV.dat

Also beim Kopieren soll die Datei auch noch umbenannt werden. Also nicht die Ausgangsdatei, sondern die soeben kopierte Ziel-Datei.

Aus:
"D:\Ordner\datei.dat\datei.dat" wird dann:
"D:\Ordner\data\daten1\dateiV.dat" wobei die "D:\Ordner\datei.dat\datei.dat" unverändert bleibt.

Kopierte Datei umbenennen:
also versuche ich die kopierte Datei in einem 2. Schritt umzubenennen:
del /Q /F data\datei.dat
ren data\datei.dat dateiV.dat

Das mit dem Löschen klappt aber nicht(ich möchte es ja ohne absolute Pfadangabe haben). Das umbenennen würde aber klappen(habe ich extra getestet).


julia :)
 
Zuletzt bearbeitet:
Hallo Julia,

Du hast Recht:

xcopy kann leider nicht ohne folgende Zusatzabfrage eine Datei unter anderem Namen in ein Unterverzeichnis kopieren.

c:\>xcopy datei.dat ordner2\datei3.dat
Ist das Ziel ordner2\datei3.dat ein Dateiname
oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)? d
C:datei.dat
1 Datei(en) kopiert

Das hatte ich auch nicht (mehr) auf Rechnung.
Du kannst aber die Abfrage automatisch beantworten, indem Du diese Pipe "|" (AltGr plus ><-Taste mit dem ECHO-Befehl einsetzt. Also:

c:\>echo d | xcopy datei.dat ordner2\datei33.dat

Frei übersetzt: Die Frage, die der XCOPY-Befehl stellt, beantworte mit d für Datei.


Mit diesem Trick umgehst Du das nachträgliche Umbenennen.

Dein Problem mit dem DEL-Befehl habe ich nicht verstanden. Bei mir funktioniert del ordner2\datei33.dat ohne Probleme.

Gestattest Du mir eine Frage? Was treibt Dich im Win8-Zeitalter in die dunkle BATCH-DOS-Vergangenheit, die nur noch wir PC-Dinosaurier kennen? :)

Grüße
 
Hallo Zimmermannssohn,
Code:
c:\>echo d | xcopy datei.dat ordner2\datei33.dat
sorgt dafür, dass die Batch gar nichts mehr macht. Warum eigentlich "C:\" - ist die Batch dann überhaupt noch relativ/ portabel?

"del ordner2\datei33.dat" funktioniert bei mir nicht. Ich muß es so schreiben, damit es funktioniert: " del .\ordner2\datei33.dat". Sonst würde er vom Grundordner, z.B. Laufwerk D:\ ausgehen & keine Datei finden dort, die so heißt. Ich führe die Bat.Batch ja aus "D:\Ordner" aus. Und nicht aus "D:\".

Frage stattgegeben ;) Ist eigentlich recht langweilig ;) Dei Antwort lautet google. Ich bevorzuge generell portable Programme. Portabel, wenn ich mal das OS neu aufsetzen muß oder etwas auf ein anderes System kopieren möchte. Dann habe ich in google mal nachgesehen. Vorteil von Batches sind, dass sie schon lange portable auch zur nächsten OS-Generation sind. Funktionieren unter 16bit und 64bit etc. Das spricht mich dann natürlich an :) Ich habe auch schon mal C++ angeguckt. Ist aber vom Einstieg her viel unmotivierender als ne Batch-Datei, womit ich sofort was auslösen konnte, außer Hallo Welt. Ein weiter Punkt ist, dass es ja sofort & ohne Aufwand verfügbar ist unter Windows. Auch die Bekannte Umgebung spielt sicherlich auch eine Rolle - ich fühle mich direkt sicher, wenn ich eine Textdatei bearbeite. Und der Texteditor startet auch schnell und zuverlässig.

ein schönes Wochenende

Julia :)
 
Hallo Julia,

c:\> war missverständlich, es sollte nur für irgendein beliebiges Verzeichnis stehen, in dem datei.dat abgespeichert ist. Mein Pfad, in dem ich Dein Problem bearbeitet habe, war tatsächlich unter c.\user\...\...\... und 5 Ebenen tief. Ich wollte diesen Pfad nicht in meine Anleitung kopieren, weil dann die Prompt-Zeile total unübersichtlich geworden wäre.

Der Befehl bzw. die Batch

echo d | xcopy datei.dat ordner2\datei33.da

muss natürlich in dem Verzeichnis gestartet werden, in dem auch datei.dat steht. Sonst findet XCOPY das File nicht.

Selbes gilt auch für den DEL-Befehl:

del ordner2\datei33.dat

Das Verzeichnis ordner2, in dem wiederum datei33.dat gespeichert ist, muss ein Unterverzeichnis des Ortes sein, an dem Du Deine Batch startest.

Also

1. D:\mehrere Unterverzeichnisse\Ordner\datei.dat

2. dort Batch starten:
echo d | xcopy datei.dat ordner2\datei33.da

ergibt:

D:\mehrere Unterverzeichnisse\Ordner\ordner2\datei33.dat

3. Im Verzeichnis
D:\mehrere Unterverzeichnisse\Ordner
diesen Befehl ausführen

del ordner2\datei33.dat

ergibt:

D:\mehrere Unterverzeichnisse\Ordner\ordner2\[l e e r]

Ist die Verwirrung jetzt komplett? :)

Grüße
 
nein gar nicht komplett - das ist dann ganz logisch. Danke für die Informationen, Zimmermansohn :) Einmal hast du ein "t" vergessen, bei "dat".

Der Vorteil von deiner Lösung mit dem "echo" ist auch noch, dass dann kein attrib notwendig ist. Bei del wäre das notwendig, weil die schreibgeschütze Datei sonst nicht überschrieben wird. Mit xcopy wird sie allerdings überschrieben.
 
Anzeige
Oben