Wie kopiere ich eine Datei in ein Verzeichnis in DOS und erstellt ggf. Verzeichnisse?

75980
nodmonkey

Wie kann ich eine Datei mit DOS-Befehlen in eine Verzeichnisstruktur kopieren, die möglicherweise noch nicht vorhanden ist? Ich muss in der Lage sein, die Erstellung des Verzeichnispfads zum Zieldateispeicherort zu erzwingen, wenn dieser nicht bereits vorhanden ist.

Zum Beispiel befindet sich an diesem Ort bereits eine Datei file.txt:

C:\file.txt 

Und ich möchte es kopieren

C:\example\new\path\to\copy\of\file\file.txt 

aber zu diesem Zeitpunkt

C:\example\ 

und alle Unterverzeichnisse können existieren oder noch nicht.

Grundsätzlich suche ich nach einem Befehl "Kopieren und bei Bedarf den Zielpfad erstellen". Was würden Sie empfehlen, ist der beste Weg, um dies zu erreichen?

32
Geht es bei dieser Frage eigentlich um DOS (oder MS-DOS) oder um die Befehlszeile in NT-basierten Windows-Versionen (2000, XP, Vista, 7, 8, Server)? Bob vor 12 Jahren 0
Ich meinte die DOS-ähnliche Windows-CLI. Was empfehlen Sie am besten, um "DOS-ähnliche Windows-CLI" für den Beitragstitel zu beschreiben? nodmonkey vor 12 Jahren 0
Im Allgemeinen würde ich `Windows-Befehlszeile` im Titel / Hauptteil zusammen mit den Tags [tag: windows] und [tag: command-line] verwenden (beachten Sie, dass [tag: cmd.exe] ein Tag-Synonym von [tag ist.) :Befehlszeile]). Das Tag [Tag: ms-dos] sollte entfernt werden. und das Tag [tag: dos] sollte unter keinen Umständen verwendet werden. Bob vor 12 Jahren 0
In diesem Fall können Sie die vorhandenen / akzeptierten Antworten jedoch auch für DOS / MS-DOS beibehalten. Als zukünftige Referenz wird / sollte DOS als Betriebssystem (e) interpretiert werden. Während die Windows-Befehlszeile darauf basiert, gibt es einige auffällige Unterschiede. Bob vor 12 Jahren 0
Sie können es die Cmd-Eingabeaufforderung nennen barlop vor 9 Jahren 0

3 Antworten auf die Frage

26
b w

Ja, das ist XCopy . So wird es aussehen:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt 

XCOPY-Info unter

Vielleicht möchten Sie auch ROBOCOPY, das XP-Ressourcenkit und den Standard in Vista, Windows 7 und Server 2008 kennenlernen.

robocopy . c:\example\new\path\to\copy\of\file file.txt 
xcopy ist in Ordnung, wenn Sie Ihre Datei nicht umbenennen müssen. Wenn Sie dies tun, werden Sie von xcopy leider gefragt, ob das Ziel ein Verzeichnis oder ein Dateiname ist, und es gibt keinen Befehlszeilenschalter, der "es ist eine Datei" angibt. RomanSt vor 10 Jahren 3
Siehe die andere Antwort - verwenden Sie ein vorangestelltes `echo f | `mit xcopy, um diese Aufforderung automatisch zu beantworten. mcw0933 vor 10 Jahren 3
Beachten Sie, dass sich am Ende des Zielpfads ein Schrägstrich "\" befinden sollte. Andernfalls fordert der Befehl den Benutzer auf, anzugeben, ob das Ziel ein Verzeichnis oder eine Datei ist, wenn es nicht existiert. Lii vor 6 Jahren 0
14
msb

Ich habe versucht etwas zu benutzen:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt 

Aber es würde mich fragen, ob es sich um eine Datei oder ein Verzeichnis handelt. Da ich das in einer Batchdatei mit 40000 Dateien hatte, wäre es unpraktisch. Diese Lösung löst mein Problem nur teilweise: Es erstellt die Verzeichnisstruktur, erfordert jedoch Benutzerinteraktion. Ich habe hier die Lösung für mein Problem gefunden:

https://stackoverflow.com/questions/4283312/batch-file-asks-for-file-or-folder

Das ist im Grunde ein "*" am Ende der Zieldatei hinzuzufügen:

xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt* 

BEARBEITEN: Wie @romkyns zeigt, kann es zu unerwünschten Ergebnissen kommen, wenn Sie Dateien mit demselben Namen und etwas anderem haben (wie 'file.txt.bak'). In demselben Thread, der oben veröffentlicht wurde, führt eine andere funktionierende Lösung "Echo f" an Ihren Befehl:

echo f | xcopy file.txt c:\example\new\path\to\copy\of\file\file.txt 

Wo sollten Sie das "f" durch den Buchstaben ersetzen, den Ihr System für die Datei verwendet, falls Sie es in einer anderen Sprache verwenden.

Was nur funktioniert, wenn sich im Verzeichnis natürlich keine `file.txt.bak` befindet. In einigen Szenarien kann dies dennoch funktionieren. RomanSt vor 10 Jahren 1
@romkyns wahr ein paar monate nachdem ich dies gepostet habe, habe ich mich mit dem gleichen problem konfrontiert und die "echo f" lösung verwendet, es funktioniert auch super. Bearbeitung meiner Antwort ... msb vor 10 Jahren 0
Mit `echo f | `, Sie brauchen nicht mehr das abschließende` * `. mcw0933 vor 10 Jahren 1
Der zweite Dateiname ist überflüssig, falls er gleich ist. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" funktioniert solange der abschließende Schrägstrich im Verzeichnis vorhanden ist (andernfalls wird gefragt, ob entweder eine Datei oder ein Verzeichnis gemeint ist) . FourtyTwo vor 8 Jahren 1
3
Dustin Laine

DOS, wow! Auf jeden Fall verwenden Sie den Befehl XCOPY .

4 Jahre später: yup. DOS verwenden wir alle noch, obwohl PowerShell existiert. Mr AH vor 10 Jahren 1