Connaître le nombre de fichiers copiés par la commande xcopy

Résolu/Fermé
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014 - 27 févr. 2014 à 23:16
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014 - 10 mars 2014 à 00:32
Bonjour,

J'ai crée un programme batch afin de chercher les fichiers .xls dans les sous-dossiers de l'utilisateur courant et de les copier sur un emplacement réseau. Je veux savoir combien de fichiers ont été copié.

Quand xcopy copie 1 fichier, il affiche 1 fichier(s) copi'(s) (ou 0 fichier(s) copi'(s) si le fichier n'a pas été copié parce qu'il est déjà présent sur l'emplacement de sauvegarde). Mais il affiche cela pour chaque fichier, sans faire le total.
Donc j'ai choisi de récupérer ce résultat (1 fichier(s) copi'(s)) dans un fichier texte, puis de lire ce fichier texte (notamment le premier caractère qui est le chiffre 0 ou 1) afin d'incrémenter une variable en lui additionnant ce chiffre et ainsi de connaître le nombre de fichiers copiés.

Mais l'addition ne se fait pas et je soupçonne que ça génère un code d'erreur.

Voile le code :

@echo off
cls
Set savepath="\\ASPIRE_9500\Partage Acer Aspire 9500\Test"
Set /a j=0
for /R %USERPROFILE% %%a in (*.xls) do (
xcopy "%%a" %savepath% /D /C /Q /Y > savelog.txt
FOR /F %%i IN (savelog.txt) DO SET /A j=%%i+%j%
if not errorlevel 1 goto Erreur
)
del savelog.txt
echo.
if %j% == 0 (Echo Aucun fichier n'a ,t, copi, sur le NAS) else (
if %j% == 1 (Echo 1 fichier a bien ,t, copi, avec succSs sur le NAS) else (
Echo %j% fichiers ont bien ,t, copi,s avec succSs sur le NAS))
echo.
Pause
Exit

:Erreur
del savelog.txt
echo.
Echo Il y a eu une erreur lors de la copie sur le NAS.
echo.
Pause

Pourriez-vous me dire comment je peux faire pour connaître le nombre de fichiers copiés ?
A voir également:

3 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 févr. 2014 à 09:03
hello
pour modifier une variable dans une boucle FOR, il faut utiliser setlocal enableDelayedExpansion et ! à la place de %
donc:
setlocal enableDelayedExpansion
Set /a j=0
...
...
FOR /F %%i IN (savelog.txt) DO SET /A j=%%i+!j!
...
if !j! == 0 .....
etc
0
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014
7 mars 2014 à 21:28
Bonsoir,

Merci beaucoup dubcek pour ta réponse.

Le programme fonctionne parfaitement (enfin sous Seven) car j'ai un problème sous XP, peut-être dans la boucle FOR.

En effet, la fenêtre de commande se ferme toute seule sans message d'erreur.

Donc, je vais essayer de m'en occuper ce weekend en l'exécutant pas à pas.

Bye.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
8 mars 2014 à 08:21
mettre un pause à a fin pour voir si il y a un message
0
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014
Modifié par Krisantem32 le 8/03/2014 à 22:19
Merci dubcek, mais justement, il y a déjà un pause à la fin, mais la fenêtre se ferme toute seule avant d'arriver là. Donc c'est un peu plus compliqué.
Je vais afficher le contenu des variables avec la commande echo dans la boucle FOR et mettre des pause pour procéder pas à pas.

Bye.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
9 mars 2014 à 14:17
ou exécuter le script dans une fenêre DOS pour voir ce qu'il fait, plutôt que par double clique
0
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014
10 mars 2014 à 00:32
Merci dubcek, je n'y avais pas pensé.
0
Krisantem32 Messages postés 7 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 10 mars 2014
9 mars 2014 à 15:27
Bonjour,

J'ai trouvé d'où venait l'erreur qui provoquait la fermeture de la fenêtre sans message d'erreur. Il fallait mettre %USERPROFILE% entre guillemets ".

En effet, sous XP les fichiers de l'utilisateur courant se trouvent dans C://Documents and Settings/NomUtilisateur et ce chemin comporte au moins 2 espaces alors que sous Seven, le chemin est C://Users/NomUtilisateur et là, il n'y a pas d'espace.

Donc, cette fois-ci, tout semble fonctionner correctement.

Je vais encore re-vérifier pour être sûr que ce programme fonctionne sans plantage possible.

Merci encore pour ton aide dubcek.

Bye.
0