Menu

Scripts batch [Résolu]

Scripteur - 7 juin 2018 à 13:11 - Dernière réponse : barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention
- 10 juin 2018 à 20:53
Bonjour,

Je vous expose mon soucis,

Je dois écrire un petit script batch qui détecte si un fichier en à modifié un autre (libre Office qui modifie un odt dans mon cas) le tout dans un script batch,

Je dois aussi montrer si libre Office supprime ce odt en question,

Sauriez vous comment faire cela s'il vous plaît ?

Merci pour votre aide

Cordialement

Scripteur
Afficher la suite 

Votre réponse

69 réponses

barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 7 juin 2018 à 20:07
0
Merci
Bonjour,

Pour savoir de façon certaine si un fichier a été modifié, il suffit de comparer le hash du fichier à un instant T avec le hash du fichier à un autre instant T.
Bonsoir,

Mais n'y a t'il pas un moyen de mettre cela dans un batch ?

Aussi, comment fait-on pour créer & configurer une variable qui est en fait une liste.txt,

je m'explique:

j'ai une liste de fichiers odt présente dans un Dossier et souhaite les supprimer de cette façon:

set lavariableenuestion = une liste de fichiers
lavariableenuestion in (liste.txt) do (del lavariableenuestion)

Est-ce possible s'il vous plait ?

Merci

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 7 juin 2018 à 21:36
Est-ce que tu es obligé de passer par liste.txt ??? Ca me semble une étape inutile.

En passant par liste.txt ça donnerait ça :
for /f "delims=" %%A in (liste.txt) do (del %%A)

ps : voilà la commande pour trouver le hash MD5 d'un fichier quelconque :
CertUtil -hashfile fichier.exe MD5 | find /v ":"
Merci pour votre réponse :

En effet, trouver le MD5 d'un fichier me serait très utile,

J'ai une dernière question :

Est-il possible de supprimer un fichier selon son empreinte MD5 en mettant la liste des signature numérique (MD5) dans un fichier liste.txt s'il vous plaît ?

Dois je mettre set MD5 = liste.txt ?

Merci

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 8 juin 2018 à 05:51
On verra ça ce soir, aujourd'hui boulot.
Commenter la réponse de barnabe0057
Commenter la réponse de Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - Modifié par barnabe0057 le 8/06/2018 à 21:17
0
Merci
J'ai du mal à comprendre la finalité de ton projet, de même que les étapes pour y parvenir.

En attendant je t'ai fait un exemple dont tu peux t'inspirer :

@echo off
setlocal enableextensions disabledelayedexpansion
chcp 65001 >nul

set DossierODT=%USERPROFILE%\Documents\Dossier

cd /d %DossierODT% || exit /b 1

echo. > liste_md5.txt

for %%A in (*.odt) do (call :hash "%%~A")

notepad liste_md5.txt

echo. & pause
exit /b 0

:hash
for /f "delims=" %%E in ('CertUtil -hashfile "%~1" MD5 ^| findstr /v ":"') do (
echo. & echo %~1;%%E
echo. & echo %~1;%%E >> liste_md5.txt
)
goto :eof

rem

La partie soulignée est à remplacer par le dossier de ton choix.


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Bonsoir,

Merci pour votre aide

Je vais vous détailler mon soucis :

J'ai des fichiers odt avec une signature en particulier, de l'autre, un fichier txt contenant des signature numérique qui ne sont pas (en théorie) affilié au odt en question,

Je souhaiterais faire un petit script (une petite boucle for) qui irait comparer les odt avec les signatures référencés dans liste.txt, si une signature correspond avec un odt, alors, ce dernier supprimera l'odt invalide puisqu'elle correspond à la signature présente dans liste.txt

Liste.txt est créer pour détecter la présence d'un fichier odt intrus avec des signature numérique en particulier prédéfinis dans liste.txt



Merci d'avance pour votre réponse

Scripteur
Commenter la réponse de barnabe0057
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - Modifié par barnabe0057 le 8/06/2018 à 22:29
0
Merci
En supposant que le fichier liste.txt existe déjà et respecte cette syntaxe :
nom de fichier1;empreinte; 
nom de fichier2;empreinte;
nom de fichier3;empreinte;
...


Voilà le script correspondant :
@echo off
setlocal enableextensions disabledelayedexpansion
chcp 1252 >nul

set DossierODT=%USERPROFILE%\Documents\dossier

cd /d %DossierODT% || exit /b 1

for %%A in (*.odt) do (call :comparaison "%%~A")

echo. & pause
exit /b 0

:comparaison
for /f "delims=" %%E in ('CertUtil -hashfile "%~1" MD5 ^| findstr /v ":"') do (

for /f "usebackq tokens=1,2 delims=;" %%G in ("liste.txt") do (
if "%%~E"=="%%~H" (
echo. & echo %~1 [ %%E ] ==^>^> correspondance trouvée : suppression du fichier
echo del /f "%~1" >nul
)
)
)
goto :eof

rem


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Bonsoir,

Merci, c'est exactement ce que je cherchais !

Cependant, je me demandais s'il était possible de chercher cela dans tous le disque C:

Dois je me placer dans C: et modifier
 del  /f 
par
del /f  /s
?

Merci pour l'aide pertinente que vous m'avez apporté !!!

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 8 juin 2018 à 22:48
Tout le disque C: ça va prendre un temps fou, mieux vaut cibler la recherche.

En général tout est stocké dans le profil utilisateur (%USERPROFILE%), pas besoin de fouiller dans tout le disque.

Actuellement mon script n'est pas prévu pour une recherche récursive, mais si tu veux je peux le modifier.
"Actuellement mon script n'est pas prévu pour une recherche récursive, mais si tu veux je peux le modifier"

Ce serais gentille de votre part, cela me serait très utile...

Merci pour le temps que vous m'avez consacré (surtout à 23h)

Scripteur
Commenter la réponse de barnabe0057
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - Modifié par barnabe0057 le 9/06/2018 à 15:53
0
Merci
Voilà une version récursive :

@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul

set DossierCible=%USERPROFILE%

cd /d %DossierCible% || exit /b 1

title Dossier Cible = %DossierCible%

set liste=liste.txt

if not exist "%liste%" (
echo. & echo ##### Liste des empreintes introuvable #####
timeout /t 5
exit /b 1
)

for /f "delims=" %%A in ('2^>nul dir /b /s "*.pdf"') do (
echo %%~A
set nom=%%~nxA
set nom=!nom:^(={!
set nom=!nom:^)=}!
if not "%%~nxA"=="!nom!" (ren "%%~A" "!nom!")
set full=%%~dpA!nom!
call:empreinte "!full!"

)

cls & echo. & echo ##### Fin de l'analyse #####
timeout /t 5
exit /b 0

:empreinte
for /f "delims=" %%E in ('CertUtil -hashfile "%~1" MD5 ^| findstr /v ":"') do (call:comparaison "%~1" "%%E")
goto :eof

rem

:comparaison
for /f "eol=µ tokens=1,2 delims=;" %%G in (%liste%) do (
if /i "%~2"=="%%H" (
cls & echo.
echo %~nx1 [ %~2 ] ==^>^> correspondance trouvée : suppression du fichier
echo del /f "%~1" >nul
timeout /t 1
echo.
)
)
goto :eof

rem

Je rappelle que le fichier liste.txt doit être présent dans le dossier cible, et il doit respecter cette syntaxe :
nom de fichier1;empreinte;
nom de fichier2;empreinte;
nom de fichier3;empreinte;
...

Si tu veux d'autres modifications, fais-moi le savoir ;)


“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 9 juin 2018 à 21:25
On s'éloigne beaucoup du problème initial, il était question de supprimer des fichiers ODT
Oui mais l'on m'avais demander de pouvoir faire cela dans tous le disque sans avoir à donner de permission quelconque
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 9 juin 2018 à 21:30
Rassure-toi il n'y a pas de fichiers ODT dans les dossiers système

Si vraiment tu y tiens, il suffit d'exécuter le script en tant qu'administrateur, ce n'est pas la mer à boire.
Ok merci,

Je me placerait alors dans le dossier de l'utilisateur

Merci pour votre aide, c'est sympa de voire qu'il y'a des gens présent comme vous sur les forum

Je reviens vers vous si j'ai d'autres soucis ou autres question...

Encore merci

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention > Scripteur - 9 juin 2018 à 21:37
De rien, n'hésite pas si tu as d'autres questions.
Commenter la réponse de barnabe0057
0
Merci
Bonjour,

Je reviens vers vous pour un tout autre soucis,

Je suis en train d'utiliser ClamWin pour désinfecter un PC et me demandais, la commande clamscan -r -i / se contente t-elle de lire les fichiers et dire si ces derniers sont infecté ou les supprime t'il svp ?

Je vous demande ça car j'ai essaye de faire un test eicar et ce dernier est passé comme OK (pour une raison que j'ignore) et n'ai donc pu vérifier cela

Au passage, le script pour les ODTs fonctionne très bien, je vous en remercie

Merci

Scripteur
J'ai eu le temps de créer un setup en créant un raccourcis demandant une élévation de privilège mais moi ce que je souhaite, c'est créer un setup demandant 1 seul fois des droit d'Admin seulement
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 10 juin 2018 à 16:19
Et ? Quel est le problème ?
Et bien, il y'a quelque chose que je n'arrive pas à comprendre,

En partant du principe que je créer un Setup et que je souhaite le convertir en appx (pour le mettre sur le Windows Store par exemple)

Sachant que déployer des logiciel nécessitant des élévations est interdit sur le Store, comment des ENT comme avast on t'il pu déployer leurs produit sans avoir à mettre de privilège ?

L'ont-il fait lors du démarrage, si oui, comment ?

Merci pour votre aide, je sais que ça fait beaucoup de messages
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 10 juin 2018 à 16:51
Je ne sais pas, je ne suis pas développeur.

Pose-leur la question.
Commenter la réponse de Scripteur
0
Merci
Bon, au final, j'ai encore une question:

Est-il possible de lancer plusieurs commande dans un même bat, je m'explique:

Pouvoir lancer

:fenêtre1
ping 0.0.0.0

:fenêtre2
ping 1.1.1.1


En même temps s'il vous plait, car sinon, cela m'oblige à créer plusieurs *.bat

Merci

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 10 juin 2018 à 20:29
Ok, si tu veux lancer plusieurs instances de clamscan.exe tu peux essayer la commande START
Merci pour ce tuyaux,

Selon vous,

Si je souhaite exécuter clamscan.exe en admin en ligne de commande,

serait-il mieux de faire un setup avec clamscan qui demande une élévation de privilège ou simplement le script lancé en Admin.

Je met le sujet en résolue puisque le PB original avait déjà été réglé (par votre aide)

--Bon au final, résolue n'apparait pas encore sur le topic, pourtant, j'ai cliqué sur ''votre pb est résolue"
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 10 juin 2018 à 20:40
Personnellement je trouve qu'un script lancé en admin est plus pratique qu'un vrai setup.

J'ai passé le sujet en "Résolu"
Cool merci pour votre patience et votre aide !

Bonne soirée

Scripteur
barnabe0057 12103 Messages postés lundi 2 mars 2009Date d'inscriptionContributeurStatut 2 octobre 2018 Dernière intervention - 10 juin 2018 à 20:53
Merci pareillement.
Commenter la réponse de Scripteur