444 votes

Xcopy fichier, renommer, supprimer le message "xxx spécifie-t-il un nom de fichier..."

Cela semble assez simple et peut-être que je survole simplement le bon drapeau, mais comment pourrais-je, en une seule commande, copier un fichier d'un répertoire à un autre et le renommer dans le répertoire de destination ? Voici ma commande :

if exist "bin\development\whee.config.example"
  if not exist "TestConnectionExternal\bin\Debug\whee.config"
    xcopy "bin\development\whee.config.example"
          "TestConnectionExternal\bin\Debug\whee.config"

Il me demande ceci à chaque fois :

Le fichier TestConnectionExternal\bin\Debug\whee.config spécifie-t-il un nom de fichier ou un nom de répertoire sur la cible (F = fichier, D = répertoire) ?

Je veux supprimer ce message ; la réponse est toujours F.

17 votes

Echo f | xcopy ...

0 votes

Downvote pourquoi utilises-tu même xcopy si copy fait ce que tu veux

0 votes

664voto

Arnshea Points 6270

J'utilise

echo f | xcopy /f /y srcfile destfile

pour contourner cela.

19 votes

@Arnshea - merci ! Adapté pour la copie de répertoire silencieux echo d | xcopy srcdirectory destdirectory /S

9 votes

+1 @Arnshea il m'a fallu un certain temps pour comprendre ce que tu fais exactement là et comme je travaille sur une installation de fenêtres allemande, c'est echo d | xcopy ... pour moi. Tu es brillante

3 votes

Pouvez-vous expliquer en détail ce que cela fait et pourquoi c'est mieux que la réponse acceptée?

238voto

LBushkin Points 60611

N'utilisez pas le xcopy, utilisez plutôt le copy, il n'a pas ce problème.

xcopy est généralement utilisé lors de copies récursives de plusieurs fichiers/dossiers, ou lorsque vous avez besoin des fonctionnalités de vérification/confirmation qu'il offre. Pour les copies de fichiers simples, la commande copy fonctionne très bien.

107 votes

copie ne copiera pas le fichier si la structure complète du répertoire de destination n'existe pas déjà. xcopy créera automatiquement tous les répertoires nécessaires.

41 votes

C'est incroyable que xcopy ait cette omission. S'il avait simplement une option pour les fichiers comme il en a pour les répertoires (/I), cela serait résolu et xcopy pourrait être un excellent remplacement pour copy. Au lieu de cela, en raison de ce défaut, vous devez choisir copy pour ces situations.

37 votes

Comme d'autres l'ont déjà souligné, la réponse de @Arnshea est la bonne. Cela est dû au fait que a) les circonstances particulières de l'OP ayant déjà la structure de répertoires en place n'ont pas été mentionnées dans la question, et b) il est beaucoup plus précieux pour les futurs lecteurs de cette question qui viendront ici chercher une réponse concernant xcopy et pas seulement copy.

189voto

zippycoder Points 379

Une autre option consiste à utiliser un joker de destination. Notez que cela fonctionne seulement si les noms de fichiers source et de destination seront les mêmes, donc même si cela ne résout pas l'exemple spécifique de l'OP, je pensais que cela valait la peine d'être partagé.

Par exemple:

xcopy /y "bin\development\whee.config.example" "TestConnectionExternal\bin\Debug\*" 

créera une copie du fichier "whee.config.example" dans le répertoire de destination sans demander de confirmation pour le fichier ou le répertoire.

Mise à jour: Comme mentionné par @chapluck:

Vous pouvez changer "* " en "[nouveauNomFichier].*". Cela préserve l'extension du fichier mais permet de le renommer. Ou de manière plus astucieuse: "[nouveauNomFichier].[nouvelleExt]*" pour changer l'extension

1 votes

La méthode "echo f |" est cool, mais cela évite la sortie supplémentaire que je cherche souvent pour trouver des problèmes en premier lieu.

6 votes

@Durden81 - comme le souligne zippycoder, leur réponse ne renomme pas le fichier, ce qui était une exigence de l'OP.

8 votes

Pour étendre la réponse, je remplacerais "* " par "[newFileName].*". Cela conserve l'extension du fichier mais permet de le renommer. Ou de manière plus astucieuse : "[newFileName].*[newExt]" pour changer l'extension.

104voto

ienaxxx Points 11

Il y a une sorte de fonctionnalité non documentée dans XCOPY. vous pouvez utiliser:

xcopy "bin\development\whee.config.example" "c:\mybackup\TestConnectionExternal\bin\Debug\whee.config*"

je l'ai testé juste aujourd'hui. :-)

5 votes

Merci beaucoup. J'ai ajouté un "*" à la fin du fichier de destination et ça a fonctionné.. :) +1 pour l'astuce

3 votes

Excellente solution - propre, élégante, n'utilise pas une commande différente, compatible avec les drapeaux xcopy existants, fonctionne parfaitement. Cela devrait être la réponse la plus votée.

7 votes

La réponse est incorrecte, la commande résultera whee.config.example dans le dossier de destination, car whee.config* correspond à whee.config.example.

73voto

Bill Points 255

Il suffit de aller à http://technet.microsoft.com/en-us/library/bb491035.aspx

Voici quelle est le PRINCIPALE PROBLÈME "... Si la destination ne contient pas un répertoire existant et ne se termine pas par un caractère d'échappement (), le message suivant apparaît: ...

La destination spécifie-t-elle un nom de fichier ou un nom de répertoire sur la cible (F = fichier, D = répertoire) ?

Vous pouvez supprimer ce message en utilisant l'option en ligne de commande /i, qui fait que xcopy suppose que la destination est un répertoire si la source est plus d'un fichier ou un répertoire.

Cela m'a pris un certain temps, mais il suffit de lire le manuel.

7 votes

Cela devrait être la réponse principale ! Juste pour être vraiment clair pour les autres. Si vous copiez UN fichier d'un endroit à un autre ET que vous souhaitez que la structure complète du répertoire soit créée, utilisez la commande suivante : xcopy /"C:\Data\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg" "C:\Données cibles\\Images\2013\08\12\85e4a707-2672-481b-92fb-67ecff20c96b.jpg\" . Oui, mettez un backslash à la fin du nom de fichier!

4 votes

Bonne réponse, mais ne résout pas le problème. J'ai essayé xcopy hello.txt hello2\ . Aucun invite. Maintenant j'essaie xcopy hello.txt hello3 (sans barre oblique inverse). Il me demande si la destination est un fichier ou un répertoire. J'ai besoin d'une façon de lui dire d'assumer F ou D dans un script.

31 votes

Ceci est une réponse très étrange, surtout en raison des votes positifs, du commentaire sarcastique "RTFM" inutile et des commentaires critiquant les réponses "populaires"...car elle ne répond pas à la question initiale! La question initiale mentionnait clairement "copier un fichier d'un répertoire à un autre ET LE RENOMMER dans le répertoire de destination". La réponse tentée ci-dessus semble traiter du cas différent de copier le fichier avec le nom de fichier de destination étant le MÊME que le nom du fichier source. La solution "désordonnée" donnée par @Arnshea est la seule réponse en une seule étape que je vois ici - d'où sa "popularité".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X