2009-12-07 11 views
1

J'ai un fichier batch qui parcourt le contenu d'un fichier texte et copie un fichier spécifique à l'aide de la commande xcopy.Fichier batch Commande XCopy

Voici l'extrait de code.

for /f %%a in (FilesToCopy.txt) do (
xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f 
xcopy Common\%%a ..\..\Common\%%a /i /d /C /v /s /y /f 
) 

%% a contient des valeurs telles que Images \ image1.jpg Images \ image2.jpg

donc quand xcopy est exécuté, il ressemblerait

xcopy ..\..\Common\Images\image1.jpg Common\Images\image1.jpg /i /d /c /v /s /y 

à l'exécuter serait alors invite ce message

Does Common\Images\image1.png specify a file name 
or directory name on the target 
(F = file, D = directory)? 

il semble que le/Je commande ne fonctionne pas ou il me manque quelque chose pour supprimer le message ci-dessus.

Répondre

4

Eh bien, vous avez quitté la deuxième déclarationl'aide donne environ /I:

/I   If destination does not exist and copying more than one file, 
      assumes that destination must be a directory.

Vous ne jamais copier un fichier à la fois, /I ne joue pas.

Vous pouvez probablement hack résoudre ce par la tuyauterie F dans la commande et la suppression de sortie:

echo F|xcopy ..\..\Common\%%a Common\%%a /i /d /c /v /s /y /f >nul 

(Ne fonctionne pas sur les versions non anglaises de Windows, mais probablement c'est le moindre de vos problèmes, étant donné que le lot ne déjà pour les noms de fichiers avec des espaces :-))

Vous pouvez essayer de construire une longue liste unique de noms de fichiers à copier:

setlocal enabledelayedexpansion enableextensions 
set LIST= 
for /f %%a in (FilesToCopy.txt) do set LIST=!LIST! "..\..\Common\%%a" 
xcopy %LIST% Common /i /d /c /v /s /y /f 

Cela nécessite deux passages sur le fichier initial, cependant. Et il échoue lorsque la liste des noms de fichiers dépasse 8190 caractères.

+0

avec la chose hack, je vais essayer votre tho solution ... comme vous pouvez le voir il y a une vérification d'horodatage/d-il si/moyens d copie uniquement si la destination est plus ancienne. donc si la source de commandA a une nouvelle version que la destination, alors elle le remplacerait et vice versa pour la commandeB. – Juvil

+0

Ah, n'a pas pris la peine de disséquer les commutateurs là en détail, désolé :-) – Joey

1

La destination doit être un chemin, il ne demandera pas:

xcopy ..\..\Common\Images\image1.jpg Common\Images\ /i /d /c /v /s /y 

Dans votre cas, vous pouvez utiliser l'extraction de chemin avec% ~ p sur la destination puisque vous pouvez conserver que:

bon point
xcopy ..\..\Common\%%a Common\%%~pa /i /d /c /v /s /y 
+0

oui, cela fonctionnerait mais comme vous pouvez le voir, il y a une raison pour laquelle je l'utilise le fichier texte et le stocker à %% a, de cette façon, j'aurais un chemin de destination dynamique. Les images ne sont pas le seul chemin attendu. – Juvil

+0

Bon point. J'ai mis à jour ma réponse pour montrer que vous pouvez extraire le chemin de vos éléments dans le fichier texte. –

Questions connexes