Come copiare un file in una directory in DOS e creare directory se necessario?


37

Come posso copiare un file usando i comandi DOS in una struttura di directory che potrebbe non esistere ancora? Devo essere in grado di forzare la creazione del percorso della directory nella posizione del file di destinazione se tale posizione non esiste già.

Ad esempio, esiste già un file.txt in questa posizione:

C:\file.txt

E voglio copiarlo in

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

ma in questo momento

C:\example\

e tutte le sottodirectory potrebbero o meno esistere.

Fondamentalmente, sto cercando un comando "copia e crea il percorso target se necessario". Quale consiglieresti è il modo migliore per raggiungere questo obiettivo?


Questa domanda riguarda effettivamente DOS (o MS-DOS) o riguarda la riga di comando presente nelle versioni di Windows basate su NT (2000, XP, Vista, 7, 8, Server)?
Bob,

Intendevo l'interfaccia della riga di comando di Windows simile a DOS. Cosa mi consigliate è il modo migliore per descrivere "CLI Windows simile a DOS" per il titolo del post?
nodmonkey,

In genere, userei Windows command linenel titolo / corpo, insieme ai tag windows e riga di comando (nota che cmd.exe è un tag sinonimo di riga di comando ). Il tag ms-dos dovrebbe essere rimosso; e il tag dos non dovrebbe essere usato affatto in nessuna circostanza.
Bob,

Tuttavia, in questo caso, con le risposte esistenti / accettate per DOS / MS-DOS, puoi anche lasciarlo così com'è. Per riferimento futuro, DOS è / dovrebbe essere interpretato come il / i sistema / i operativo / i. Mentre la riga di comando di Windows si basa su di essi, ci sono alcune differenze notevoli.
Bob,

puoi chiamarlo prompt cmd
barlop

Risposte:


28

Sì, è xcopy . Ecco come sarà:

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

Informazioni XCOPY a

Potresti anche voler esaminare ROBOCOPY , nel kit di risorse XP e standard in Vista, Windows 7 e Server 2008.

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

3
xcopy va bene se non è necessario rinominare il file. Se lo fai, sfortunatamente xcopy ti chiederà se la destinazione è una directory o un nome file e non esiste alcuna opzione da riga di comando per specificare "è un file".
Roman,

4
Vedi l'altra risposta - usa un precedente echo f | con xcopy per rispondere automaticamente a questa richiesta.
McW0933,

Si noti che dovrebbe essere presente un carattere barra, ``, alla fine del percorso di destinazione. In caso contrario, il comando richiederà all'utente se la destinazione è una directory o un file se non esiste.
Lii,

17

Ho provato a usare qualcosa come:

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

Ma mi chiederebbe se fosse un file o una directory. Dal momento che l'ho avuto in un file batch con 40000 file, sarebbe poco pratico. Questa soluzione risolve solo parzialmente il mio problema: crea la struttura di directory, ma richiede l'interazione dell'utente. Ho trovato la soluzione al mio problema qui:

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

Che è fondamentalmente per aggiungere un "*" alla fine del file di destinazione:

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

EDIT: come indicato da @romkyns, potrebbe avere risultati indesiderati se si hanno file con lo stesso nome più qualcos'altro (come 'file.txt.bak'). Nella stessa discussione pubblicata sopra, un'altra soluzione che funziona è il piping "echo f" al tuo comando:

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

Dove dovresti sostituire la "f" con qualsiasi lettera utilizzata dal tuo sistema per il file, nel caso in cui la usi in un'altra lingua.


1
Che funziona solo se non ce n'è file.txt.baknella directory, ovviamente. Tuttavia, questo potrebbe funzionare in alcuni scenari.
Roman,

@romkyns true. pochi mesi dopo aver pubblicato questo, mi sono trovato di fronte allo stesso problema e ho fatto la soluzione "echo f", funziona benissimo. Modifica della mia risposta ...
msb,

1
Con echo f | , non è più necessario il trascinamento *.
McW0933,

1
Il secondo nome file è ridondante nel caso in cui sia lo stesso. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" funzionerà fintanto che la barra finale nella directory è presente (altrimenti chiede se si intende un file o una directory) .
Quarantadue


0

Se si utilizza copyo xCopy, al fine di evitare un errore copyo un prompt da xCopy, verificare l'esistenza della cartella necessaria e crearla se necessario:

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

o combina i comandi con &&su una riga di comando:

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

La stessa cosa si può fare moveinvece di copy. Ho imparato questa tecnica da una risposta StackOverflow su come farlo move.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.