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

Résolu/Fermé
Signaler
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014
-
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014
-
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 ?

3 réponses

Messages postés
18344
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 novembre 2021
5 442
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
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014

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.
Messages postés
18344
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 novembre 2021
5 442
mettre un pause à a fin pour voir si il y a un message
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014

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.
Messages postés
18344
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 novembre 2021
5 442
ou exécuter le script dans une fenêre DOS pour voir ce qu'il fait, plutôt que par double clique
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014

Merci dubcek, je n'y avais pas pensé.
Messages postés
7
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
10 mars 2014

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.