Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
Script recopie fichier en fonction de son lastupdate
Auteur Message
Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Bonjour,

je vous expose mon script que je n'arrive pas à améliorer pour pouvoir recopier un fichier entre la SRC et DEST si plus récent.

Contexte : Je recopie un fichier (PPTX) d'un NAS (connecteur réseau monté), vers un PC en local pour ensuite l'ouvrir et l'afficher sur un écran en permanence.

Mon script actuel à défaut de ne pas trouver de solution :

Code:
@echo off
title refresh LIVE TV V1.0
color 2
taskkill /f /im POWERPNT.EXE
:: Recopie fichier du S: vers le bureau
xcopy "Y:\LIVE TV.pptx" C:\Users\Addams\Desktop /y /d
:: Ouverture du fichier en mode fullscreen
"C:\Program Files\Microsoft Office\Office16\POWERPNT.EXE" /S "C:\Users\Addams\Desktop\LIVE TV.pptx"
exit


Je commence par un taskkill, alors que je ne devrais que l'exécuter en fonction de la présence d'un fichier plus récent que celui en destination.

Concrètement, je cherche à :

vérifier si le fichier en SRC est plus récent que celui en DEST
Si OUI, fermer les processus de POWERPOINT; recopier le fichier et le réouvrir
Si NON, arrêter le programme

Il me semble que le /d de la commande xcopy le vérifie, mais je ne vois pas comment interpreter le résultat qu'elle génère. Je vois en fonction de la situation '1 fichier(s) copié(s)' ou '0 fichier(s) copié(s)'

Merci d'avance pour votre aide

EDIT DE DARKBATCHER:
Pensez à [CODE]



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Bonsoir,

je l'ai fait évolué de cette façon :

:: Recopie fichier du map: vers le bureau
xcopy "C:\Users\addams\Desktop\maps\LIVE TV.pptx" C:\Users\addams\Desktop\%file_name%.pptx /y /R /d /k | findstr /i "0"
if %errorlevel% == 0 (
exit
)
taskkill /f /im POWERPNT.EXE
attrib +R "C:\Users\addams\Desktop\LIVE TV.pptx"
:: Ouverture du fichier en mode fullscreen su
"C:\Program Files\Microsoft Office\Office16\POWERPNT.EXE" /S "C:\Users\addams\Desktop\LIVE TV.pptx"

la commande xcopy, détecte s'il le fichier en DEST est plus récent ou pas avec le /d
j'ai rajouté une vérification de la output, si elle contient '0' pour '0 fichier copié' alors quitter.
autrement le script continue :
Il ferme les processus PPT pour réouvrir mon fichier recopié.

Le problème est que le xcopy s'il détecte la présence d'un nouveau fichier, il va essayé de le copier de SRC vers DST, sauf que si le fichier en DEST est ouvert.
Il affiche 'Violation de partage' et n'updatera pas le fichier.

J'ai essayé de mettre le fichier en DEST en read only et d'utiliser la commande /R de xcopy qui est censée tout de meme écrasé les fichiers en read only. mais meme message.

Quelqu'un aurait une idée s'il vous plait ?



Dernière édition par Addams le Mar 10 Avr 2018 - 13:45; édité 1 fois
Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Salut,

À quelle fréquence lances-tu ton script ?



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
jay a écrit:
Salut,

À quelle fréquence lances-tu ton script ?

Bonjour Jay,

je le déclenche via une tache planifiée toutes les 5mn

EDIT. l'idée étant bien entendu de l'écourter ensuite pour que le fichier détecte au plus tôt les modifications et mette à jour le fichier en DEST



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Dans ce cas comment est mis à jour le ppt source, pareil, à quelle fréquence.
Ne peut-il pas être lu directement, plutôt que de le copier en local ?
Envoyer un signal (avec waitfor par exemple) au script consommateur peut-être
plus intéressant qu'une tâche planifier en boucle. Ou encore, lancer le script local
depuis le pc source.

Les solutions ne manquent pas, il te reste juste à choisir la direction que tu veux
prendre.



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
En fait le pc source récupére un fichier sur un emplacement et le stock dans un lecteur partagé.
Le pc destination n'a pas accès à cet emplacement par manque de certificats, mais il est le seul à pouvoir afficher le pptx (relié en hdmi à un écran)

Actuellement
Le ficheir est modifié sur l'emplacement en question aléatoirement et à la main
À partir du pc 'source / intermédiaire' un script se lance actuellement à la main pour récupérer le fichier édité et le mettre sur un lecteur réseau partagé que la destination voit.
Ensuite il y a le script en destination que je met dans mon post..

Je pourrais effectivement aller ouvrir directement le fichier que le pc destination voit dans le partage réseau mais là Le fichier étant en permanence ouvert, je n'arriverait pas à recopier le fichier dans ce partage.

S'il y a vraiment possibilité à partir du pc source intermédiaire, qu'il repère la modification du fichier, le mette sur le partage et donne instructions au pc destination de le récupérer..ça serait top.mais là je suis largué



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Addams a écrit:

S'il y a vraiment possibilité à partir du pc source intermédiaire, qu'il repère la modification du fichier, le mette sur le partage et donne instructions au pc destination de le récupérer..ça serait top.mais là je suis largué


Oui, c'est possible, renseigne-toi sur les commandes waitfor ou psexec par exemple.
Pour recopier le fichier source en dest, il faut le renommer à la volée, et ensuite lancer
powerpnt directement dessus, sans le tuer. Enfin, finir en supprimant l'ancien fichier.

Si tu souhaites continuer avec xcopy, un début serait :

xcopy /y /f /d /l "%source%" "%current_dest%" | findstr ":.*:"
si errorlevel 1 alors la source n'a pas été actualisée, quitter le script
sinon faire la copie vers %new_dest%
powerpnt /s "%new_dest%"
supprimer "%current_dest%"

Comme ça, la présentation reste fluide et normalement sans interruption, car il
me semble que powerpoint est mono-instance en configuration standard.



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
jay a écrit:
Addams a écrit:

S'il y a vraiment possibilité à partir du pc source intermédiaire, qu'il repère la modification du fichier, le mette sur le partage et donne instructions au pc destination de le récupérer..ça serait top.mais là je suis largué


Oui, c'est possible, renseigne-toi sur les commandes waitfor ou psexec par exemple.
Pour recopier le fichier source en dest, il faut le renommer à la volée, et ensuite lancer
powerpnt directement dessus, sans le tuer. Enfin, finir en supprimant l'ancien fichier.

Si tu souhaites continuer avec xcopy, un début serait :

xcopy /y /f /d /l "%source%" "%current_dest%" | findstr ":.*:"
si errorlevel 1 alors la source n'a pas été actualisée, quitter le script
sinon faire la copie vers %new_dest%
powerpnt /s "%new_dest%"
supprimer "%current_dest%"

Comme ça, la présentation reste fluide et normalement sans interruption, car il
me semble que powerpoint est mono-instance en configuration standard.


J'ai essayé de saisir l'idée en commentant mon script improvisé :

::dossier où le fichier est édité
set source=Z:\LIVE TV.pptx
::dossier du pc intermédiaire qui lance le script, lecteur partagé avec le PC destination
set current_dest=S:\LIVE TV.pptx
::chemin où sera stocké le fichier en destination
set new_dest=C:\users\addams\bureau\LIVE TV.pptx
::hostname du pc destination
set pc_dest=ID2018

::copie du fichier entre la source et le pc intermédiaire où je lance le script suivant la condition
xcopy /y /f /d /l "%source%" "%current_dest%" | findstr ":.*:"
::si errorlevel 1 alors la source n'a pas été actualisée, quitter le script
if errorlevel 1 (
exit
) else (
psexec \\%pc_dest% -u DOMAINE\USERNAME -p PASSWORD
)
COPY "%current_dest%" "%new_dest%"
powerpnt /s "%new_dest%"
supprimer "%current_dest%"


En utilisant un psexec l'idée serait d'à partir du poste destination (sans y être), récupérer le fichier qui se trouve sur %current_dest% et de le copier en local (%new_dest%) ?
A quel moment je lance le psexec ? dans la condition else comme je le fais ?
Pour supprimer "%current_dest%" alors que le fichier est ouvert, ça ne va pas bloquer ('fichier déjà en utilisation') ?

Merci Jay



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Désolé, ce n'était peut-être pas clair.
En fait, dest, ça ne concerne que le pc de destination, celui qui fait la lecture.
Ainsi, current_dest, c'est le fichier en cours d'utilisation, et new_dest, c'est le
nouveau fichier à lire. Dès lors, quand tu lances ton powerpoint sur le nouveau
fichier, l'ancien est normalement libéré, et tu peux alors le supprimer.

Par contre, si tu utilises psexec, tu n'as plus besoin de xcopy pour voir si le
fichier source (du lecteur partagé en fait) est plus récent, puisque ce sera lancé
manuellement en même temps que la mise à disposition de la nouvelle version
de ce fichier source. Dans les faits, psexec remplace la tâche planifiée.



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
jay a écrit:
Désolé, ce n'était peut-être pas clair.
En fait, dest, ça ne concerne que le pc de destination, celui qui fait la lecture.
Ainsi, current_dest, c'est le fichier en cours d'utilisation, et new_dest, c'est le
nouveau fichier à lire. Dès lors, quand tu lances ton powerpoint sur le nouveau
fichier, l'ancien est normalement libéré, et tu peux alors le supprimer.

Par contre, si tu utilises psexec, tu n'as plus besoin de xcopy pour voir si le
fichier source (du lecteur partagé en fait) est plus récent, puisque ce sera lancé
manuellement en même temps que la mise à disposition de la nouvelle version
de ce fichier source. Dans les faits, psexec remplace la tâche planifiée.




Bonjour Jay

Actuellement j'ai un script qui prend le fichier édité de sa source vers le partage réseau. Il tourne en boucle, détecte la présence d'un nouveau fichier et le recopie.
Il a tendance a ne pas mettre à jour la date de dernière modification sur le fichier. du coup les exécutions suivantes de xcopy détectent un delta entre les deux fichiers et recopient le fichier continuellement.
Pour contourner je pourrais peut être lui dire que s'il détecte un delta, alors, supprime le fichier sur le partage et lance la copie pour contourner le probleme.
SCRIPT :
:debut
::copie du fichier entre la source et le partage réseau
xcopy /d /y "Z:\slide ECRAN TV - Traitement des demandes et Incidents LIVE.pptx" "S:\78-EARS\13-SIP\10-temp\"
timeout 60
goto debut

Ensuite l'idée, si j'ai bien comptris tes explications, ça serait qu'en destination un script récupère le fichier sur le partage et l'enregistre avec un nom aléatoire.
Ensuite il l'ouvre et supprime l'ancien ?

J'ai testé d'ouvrir un PPT (powerpnt /s), puis d'en ouvrir un autre avec un nom différent. ensuite de supprimer le premier fichier, mais comme le processus est ouvert, ça bloque la suppression.

cdlt
addams



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Addams a écrit:

J'ai testé d'ouvrir un PPT (powerpnt /s), puis d'en ouvrir un autre avec un nom différent. ensuite de supprimer le premier fichier, mais comme le processus est ouvert, ça bloque la suppression.


Essaye de refaire ton test en regardant avec tasklist ou le gestionnaire des tâches
si tu as bien une seule instance de powerpoint, c'est-à-dire un seul processus. Si
c'est bien le cas, alors il faudra utiliser l'utilitaire handles.exe pour libérer le fichier.

Enfin, si la mise à jour avec la date n'est pas fiable, tu peux te replier sur du
"checksum" ou te contenter de comparer les tailles des fichiers.



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Salut Jay,

bon, j'ai fais des mutitudes de tests rien que pour essayer d'avoir le premier script fonctionnel pour recopier d'un emplacement réseau à un autre mais toujours sans succès

@echo off
:debut
::copie du fichier entre la source et le partage réseau
xcopy /d /y "Y:\LIVE TV.pptx" "C:\Users\addams\Desktop\LIVE TV.pptx" | findstr "0"
if errorlevel 1 (
xcopy /y "Y:\LIVE TV.pptx" "C:\Users\addams\Desktop\LIVE TV.pptx"
)
timeout 15
goto debut

En éditant le fichier à la source, je lance le script une première fois et il recopie le fichier, le script lancé en boucle. je modifie à nouveau le fichier source, le script le détecte, le recopie... et le recopie continuellement.
Concrètement, le contenu est copié, mais la date de dernier enregistrement du fichier reste antérieure à celle du fichier source. Mon xcopy avec le /d semble se baser sur ça, donc il recopie en boucle tant que la date ne devienne pas ISO. Je parle bien de la date d'enregistrement et non de la date de dernière modification.
La date d'enregistrement ne semble que s'enregistrer que si on ouvre le fichier, suivi d'une modification puis sauvegarde.

ça m'a tout l'air d'un bug, j'ai utilisé robocopy, meme fait du mirroring.. aussi la commande filetouch mais rien ne solutionne mon problème.
filetouch /W /A /C "Y:\LIVE TV.pptx"

comment faire une vérification par checksum ? je crois que c'est mon dernier recours



Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Bonjour,

Pensez à utiliser la balise code, c'est beaucoup plus lisible
merci.



Visiter le site web du posteur Skype
Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Je t'avais donné la ligne de code pour xcopy. Pourquoi ne l'as-tu pas utilisé ?
Voici un exemple plus parlant.

Code:

@echo off
set "source=a.txt"
set "dest=b\b.txt"
:deb
xcopy /y /f /d /l "%source%" "%dest%" | findstr ":.*:" >nul
if errorlevel 1 (
  echo prochaine tentative dans 10 secondes
  ping -n 10 127.0.0.1 > nul
  ) else (
  echo.
  echo copy...
  xcopy /y /f /d "%source%" "%dest%"
  echo.
)
goto deb



À chaque modification de a.txt, la copie a bien eu lieu.


Citation:


copy...
X:\a.txt -> X:\b\b.txt
1 fichier(s) copié(s)

prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes

copy...
X:\a.txt -> X:\b\b.txt
1 fichier(s) copié(s)

prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes

copy...
X:\a.txt -> X:\b\b.txt
1 fichier(s) copié(s)

prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes
prochaine tentative dans 10 secondes




Répondre en citant
Message Script recopie fichier en fonction de son lastupdate 
Bonjour Jay,

Je te confirmes avoir utilisé ces commandes sans succès, du moins, elles sont fonctionnelles, mais ma configuration me pose problème.

En effet, j'ai pu ciblé ce qui me laissait croire que les commandes étaient à revoir..

Tout ce que je copie de ma source (emplacement mappé sharepoint, authent forte) vers un autre emplacement et vice-versa, ne met pas à jour la date de dernier enregistrement sur la cible.
donc les commandes xcopy (meme celles données), robocopy etc voient toujours un fichier plus récent en source, donc le recopie continuellement.
avec ROBOCOPY, curieusement, au bout de la 3eme ou 4eme recopie la date de dernier enregistrement se met à jour sur la cible, bien que aléatoire quand meme.
J'abandonne ce point bloquant.

je regarde à présent pour la gestion des processus ppt sur la cible

merci de ton aide



Message Script recopie fichier en fonction de son lastupdate 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch