Wie kopiere ich eine Datei in ein DOS-Verzeichnis und erstelle gegebenenfalls Verzeichnisse?

37

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

Zum Beispiel gibt es bereits eine file.txt an diesem Ort:

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 vorhanden sein oder noch nicht.

Grundsätzlich suche ich einen Befehl "Kopieren und ggf. Zielpfad erstellen". Was würden Sie empfehlen, um dies zu erreichen?

Nodmonkey
quelle
Handelt es sich bei dieser Frage tatsächlich um DOS (oder MS-DOS) oder um die Befehlszeile in NT-basierten Windows-Versionen (2000, XP, Vista, 7, 8, Server)?
Bob
Ich meinte die DOS-ähnliche Windows-CLI. Was empfehlen Sie, um "DOS-like Windows CLI" für den Beitragstitel am besten zu beschreiben?
Nodmonkey
Im Allgemeinen würde ich Windows command lineim Titel / Text zusammen mit den Tags windows und command-line verwenden (beachte, dass cmd.exe ein Tag-Synonym für command-line ist ). Das Tag ms-dos sollte entfernt werden. und das tag dos sollte unter keinen umständen verwendet werden.
Bob
In diesem Fall können Sie jedoch die vorhandenen / akzeptierten Antworten für DOS / MS-DOS unverändert lassen. Zum späteren Nachschlagen ist / sollten DOS als Betriebssystem (e) interpretiert werden. Obwohl die Windows-Befehlszeile darauf basiert, gibt es einige bemerkenswerte Unterschiede.
Bob
Sie können es die cmd-Eingabeaufforderung nennen
Barlop

Antworten:

28

Ja, das ist xcopy . So sieht es aus:

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

XCOPY Infos unter

Möglicherweise möchten Sie auch ROBOCOPY im XP Resource Kit und Standard in Vista, Windows 7 und Server 2008 untersuchen.

robocopy . c:\example\new\path\to\copy\of\file file.txt
bw
quelle
3
xcopy ist in Ordnung, wenn Sie Ihre Datei nicht ebenfalls umbenennen müssen. In diesem Fall werden Sie von xcopy leider gefragt, ob es sich bei dem Ziel um ein Verzeichnis oder einen Dateinamen handelt, und es gibt keine Befehlszeilenoption, mit der angegeben werden kann, dass es sich um eine Datei handelt.
RomanSt
4
Siehe die andere Antwort - verwenden Sie ein vorangestelltes echo f | mit xcopy, um diese Aufforderung automatisch zu beantworten.
mcw0933
Beachten Sie, dass am Ende des Zielpfads ein Schrägstrich (``) stehen muss. Andernfalls fragt der Befehl den Benutzer, ob das Ziel ein Verzeichnis oder eine Datei ist, falls diese nicht vorhanden ist.
Lii
17

Ich habe versucht mit etwas wie:

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

Aber es würde mich fragen, ob es eine Datei oder ein Verzeichnis war. Da ich das in einer Batch-Datei mit 40000 Dateien hatte, wäre es unpraktisch. Diese Lösung löst mein Problem nur teilweise: Sie 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

Welches 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 von @romkyns angegeben, kann es zu unerwünschten Ergebnissen kommen, wenn Sie Dateien mit demselben Namen und etwas anderem (wie 'file.txt.bak') haben. Im selben Thread, den Sie oben gepostet haben, leitet eine andere Lösung "echo f" an Ihren Befehl weiter:

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

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

msb
quelle
1
Das funktioniert file.txt.baknatürlich nur, wenn es keine im Verzeichnis gibt. Dies kann jedoch in einigen Szenarien funktionieren.
RomanSt
@romkyns wahr. ein paar monate nachdem ich dies gepostet hatte, stellte ich mich dem gleichen problem und tat die "echo f" lösung, es funktioniert auch super. Bearbeiten meiner Antwort ...
msb
1
Mit echo f | brauchen Sie das Trailing nicht mehr *.
mcw0933
1
Der zweite Dateiname ist für den Fall, dass er derselbe ist, redundant. "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 eine Datei oder ein Verzeichnis gemeint ist) .
Zweiundvierzig
3

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

Dustin Laine
quelle
1
4 Jahre später: yup. DOS verwenden wir alle noch, obwohl PowerShell existiert ..
Herr AH
0

Testen Sie mithilfe von copyoder xCopy, um einen Fehler copyoder eine Eingabeaufforderung von zu vermeiden xCopy, ob der erforderliche Ordner vorhanden ist, und erstellen Sie ihn bei Bedarf:

if not exist "NewPath" MkDir "NewPath"
copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

oder kombinieren Sie die Befehle mit &&in einer Befehlszeile:

if not exist "NewPath" MkDir "NewPath" && copy "[path\]file.ext" "NewPath[\NewFileName.ext]"

Das Gleiche kann man mit machen moveanstatt mit copy. Diese Technik habe ich aus einer StackOverflow- Antwort über den Umgang damit gelernt move.

NewSites
quelle