web-dev-qa-db-fra.com

Comment copier un fichier dans un répertoire sous DOS et créer des répertoires si nécessaire?

Comment copier un fichier à l'aide de commandes DOS dans une structure de répertoire qui n'existe peut-être pas encore? Je dois pouvoir forcer la création du chemin du répertoire vers l'emplacement du fichier cible si cet emplacement n'existe pas déjà.

Par exemple, il y a déjà un fichier.txt à cet emplacement:

C:\file.txt

Et je veux le copier sur

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

mais à ce moment

C:\example\

et tous les sous-répertoires peuvent ou non exister.

En gros, je cherche une commande "Copier et créer le chemin cible si nécessaire". Que recommanderiez-vous est le meilleur moyen d'y parvenir?

36
nodmonkey

Oui, c'est xcopy . Voici à quoi ça va ressembler:

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

Informations XCOPY sur

Vous voudrez peut-être aussi vous pencher sur ROBOCOPY , dans le XP kit de ressources et la norme dans Vista, Windows 7 et Server. 2008.

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

J'ai essayé d'utiliser quelque chose comme:

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

Mais cela me demanderait s'il s'agissait d'un fichier ou d'un répertoire. Puisque j'avais cela dans un fichier batch avec 40000 fichiers, ce serait peu pratique. Cette solution ne résout que partiellement mon problème: elle crée la structure de répertoires, mais elle nécessite une interaction de l'utilisateur. J'ai trouvé la solution à mon problème ici:

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

Ce qui consiste essentiellement à ajouter un "*" à la fin du fichier de destination:

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

EDIT: comme indiqué par @romkyns, des résultats indésirables peuvent apparaître si vous avez des fichiers portant le même nom et quelque chose d'autre (comme 'fichier.txt.bak'). Dans le même fil posté ci-dessus, une autre solution qui fonctionne est le piping "echo f" de votre commande:

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

Où vous devriez substituer le "f" pour la lettre que votre système utilise pour le fichier, au cas où vous l'utiliseriez dans une autre langue.

17
msb

DOS, wow! Quoi qu'il en soit, vous utilisez la commande XCOPY .

3
Dustin Laine