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


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

Par exemple, il existe 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 en ce moment

C:\example\

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

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


32
2018-03-12 17:07


origine


Cette question concerne-t-elle réellement DOS (ou MS-DOS), ou concerne-t-elle la ligne de commande des versions Windows basées sur NT (2000, XP, Vista, 7, 8, Server)? - Bob
Je voulais dire le Windows CLI semblable à DOS. Que recommandez-vous est la meilleure façon de décrire "Windows CLI semblable à DOS" pour le titre du post? - nodmonkey
Généralement, j'utiliserais Windows command line dans le titre / corps, avec les balises les fenêtres et ligne de commande (Notez que cmd.exe est un tag synonyme de ligne de commande). Le tag ms-dos devrais être retiré; et le tag dos ne devrait en aucun cas être utilisé. - Bob
Cependant, dans ce cas, avec les réponses existantes / acceptées étant pour DOS / MS-DOS, vous pouvez aussi bien le laisser tel quel. Pour référence future, DOS est / doit être interprété comme le (s) système (s) d'exploitation. Bien que la ligne de commande Windows soit basée sur eux, il existe des différences notables. - Bob
vous pouvez l'appeler l'invite cmd - barlop


Réponses:


Ouais, c'est xcopie. Voici à quoi ça ressemblera:

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

XCOPY info à

Vous pourriez aussi vouloir regarder ROBOCOPIE, dans le kit de ressources XP et standard de Vista, Windows 7 et Server 2008.

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

26
2018-03-12 19:14



xcopy convient si vous n'avez pas besoin de renommer votre fichier. Si vous le faites, malheureusement, xcopy vous demandera si la destination est un répertoire ou un nom de fichier et il n'y a pas de commutateur de ligne de commande pour spécifier "c'est un fichier". - RomanSt
Voir l'autre réponse - utilisez un précédent echo f |  avec xcopy pour répondre à cette invite automatiquement. - mcw0933


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

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

Mais il me demanderait si c'était un fichier ou un répertoire. Comme je l'avais dans un fichier de commandes avec 40000 fichiers, ce ne serait pas pratique. Cette solution ne résout que partiellement mon problème: elle crée la structure des répertoires, mais nécessite une interaction de la part 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, il peut avoir des résultats indésirables si vous avez des fichiers qui ont le même nom plus quelque chose d'autre (comme "fichier.txt.bak"). Dans le même thread posté ci-dessus, une autre solution qui fonctionne est de "echo f" à votre commande:

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

Où vous devez remplacer le "f" pour n'importe quelle lettre que votre système utilise pour le fichier, au cas où vous l'utiliseriez dans une autre langue.


12
2017-08-14 17:05



Qui ne fonctionne que s'il n'y a pas de file.txt.bak dans le répertoire, bien sûr. Cependant, cela pourrait fonctionner dans certains scénarios. - RomanSt
@romkyns vrai. quelques mois après que j'ai posté ceci, je me suis confronté au même problème et j'ai fait la solution "echo f", ça marche très bien aussi. Modifier ma réponse ... - msb
Avec echo f | , vous n'avez plus besoin de trailing *. - mcw0933
Le second nom de fichier est redondant au cas où il serait identique. "xcopy file.txt c: \ example \ new \ path \ to \ copy \ of \ file \" fonctionnera aussi longtemps que la barre oblique finale du répertoire est là (sinon, il demande si un fichier ou un répertoire est utilisé) . - FourtyTwo


DOS, wow! De toute façon, vous utilisez le XCOPY commander.


3
2018-03-12 17:13



4 ans après: yup. DOS nous l'utilisons tous, même si PowerShell existe. - Mr AH