18

Je souhaite que VS copie le fichier .lib qu'il a créé après le processus de construction dans un dossier spécifique. Je suis donc allé à la configuration du projet, événement après génération, et est entré dans la commande suivante:VS 2012: erreur xcopy Post Build 2

if exist $(TargetPath) 
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

Mais au lieu de copier le processus échoue après que je clique sur « construire » et je reçois l'erreur suivante:

error MSB3073: The command "if exist C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

:VCEnd" exited with code 2.

Je m'interroge également sur le :VCEnd dans la chaîne de commande du message d'erreur < - Peut-être que c'est la raison? Comment l'obtenir?

Toute aide et conseils seraient heureusement consommés:) ...

solution partielle:

EDIT: il semble que le changement de nom partie (Inc.lib à z.lib) fait problème, quand xcopy demande s'il s'agit d'un fichier ou un répertoire ... cela fonctionne quand je copie juste le fichier initialement nommé dans un répertoire au lieu de copier renommé

+1

Copiez/collez le PostBuildEvent de votre projet dans votre question. Ne l'éditez pas, faites-le exactement de la même manière. –

+0

il semble que la partie de renommage (Inc.lib en z.lib) pose problème, quand xcopy demande s'il s'agit d'un fichier ou d'un répertoire ... cela fonctionne quand je copie simplement le fichier lib dans un répertoire sans le renommer. .. – Incubbus

+1

http://stackoverflow.com/a/4283533/532647 un moyen possible de le résoudre. Par 'echo f | xcopy ... 'vous diriez simplement 'fichier' à xcopy. –

Répondre

32

Xcopy documentation dit le texte suivant:

en précisant si la destination est un fichier ou un répertoire Si la destination ne contient pas un répertoire existant et ne se termine pas avec une barre oblique inverse (\), le message suivant apparaît:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

Appuyez sur F si vous voulez que le fichier ou les fichiers soient copiés dans un fichier. Appuyez sur D si vous voulez que le fichier ou les fichiers soient copiés dans un répertoire.

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

Vous avez besoin du contraire, mais il n'y a pas un tel commutateur.

La solution est proposée ici: https://stackoverflow.com/a/4283533/532647.

Il est suggéré d'ajouter le préfixe commande xcopy avec echo f |, qui fait essentiellement comme suit: il simule un utilisateur en appuyant sur la touche lorsque fxcopy demande.

Ainsi, votre commande devrait ressembler à:

if exist $(TargetPath) 
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

opérateur | juste canalise la sortie de echo f (== f) en commande xcopy et il est lu, le cas échéant. Plus d'informations sur la redirection de sortie ici: http://ss64.com/nt/syntax-redirection.html.

MISE À JOUR: Comme Govert points out, ce hack ne fonctionnera pas sous une version localisée de Windows. Cependant, un autre hack fonctionne:

xcopy D:\file.zip c:\renamedFile.zip* 

nom de fichier Adjonction de destination avec un astérisque * fait xcopy pas demander si la destination est un fichier ou un répertoire.

+13

Cela ne fonctionne pas sous les versions localisées de Windows, où les mots d'invite peuvent être différents. Une astuce alternative consiste à ajouter un astérisque '*' à la fin de la destination, puis xcopy ne demandera pas de fichier/répertoire. – Govert

+0

@Govert bon point, merci. Je vais ajouter ceci à la réponse. –

+0

Pourquoi xcopy ne reconnaît pas la source et/ou la cible en tant que fichier lorsqu'ils ont une extension de fichier et pourquoi l'astérisque fonctionne-t-il? @Govert – xr280xr

1

Avez-vous essayé d'envelopper le $ (TargetPath) entre guillemets? Les personnages de l'espace-toujours-populaire-plutôt-de-underscores-dans-tous-MS ont tendance à gâcher des choses à chaque coin ... Dunno pourquoi ces imbéciles continuent à le faire ...

Comme donc: si existe "$ (TargetPath)"

9

Pourquoi n'utilisez-vous pas la copie au lieu de xcopy? copie est spécifiquement pour les fichiers afin qu'il n'y aura pas de confusion.

+1

La réponse absolument la plus simple. JE VOUS REMERCIE. – Lara

Questions connexes