Scripts batch

Résolu/Fermé
Scripteur - Modifié le 7 juin 2018 à 13:12
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 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
A voir également:

7 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
7 juin 2018 à 20:07
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.
0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Scripteur
Modifié le 7 juin 2018 à 22:01
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 ":"
0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Scripteur
8 juin 2018 à 05:51
On verra ça ce soir, aujourd'hui boulot.
0
Up
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 8 juin 2018 à 21:17
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.

0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 8 juin 2018 à 22:29
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

0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Scripteur
Modifié le 8 juin 2018 à 22:50
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.
0
"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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 9 juin 2018 à 15:53
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 ;)

0
Bonjour,

Donc si je le met C: à la place de %USERPROFILE%,

Je pourrais chercher dans absolument tous le disque ?
Merci
Scripteur
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Scripteur
Modifié le 9 juin 2018 à 20:17
Oui mais il faut mettre C:\

Et ce sera assez lent comme je l'ai déjà dit.

Si tu veux supprimer les fichiers, n'oublie pas d'enlever le ECHO que j'ai mis devant le DEL pour faire mes essais
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 9 juin 2018 à 20:23
Pour accéder et supprimer des fichiers dans les dossiers système, il faut exécuter mon script avec le clic-droit puis "exécuter en tant qu'admin"

ps : dans mon premier FOR il faut remplacer pdf par odt.
0
Bonjour,

cela ne semble pas fonctionner,

Le script se lance et cherche dans le dossier racine et se ferme au bout de 4 seconde

Est-ce normal ?

Merci

Scripteur
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
9 juin 2018 à 20:33
C'est parce que tu n'as pas beaucoup de fichiers ODT

Le script n'affiche que les dossiers/sous-dossiers qui possèdent des fichiers ODT
0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
10 juin 2018 à 13:06
Bonjour,

Je ne peux pas répondre avec certitude, mais d'après ce que je vois le scan se contente d'analyser les fichiers, si tu veux mettre les fichiers infectés en quarantaine il faut utiliser le commutateur --move=DIRECTORY où DIRECTORY est un dossier de ton choix.
0
J'ai donc continuer à chercher et j'ai trouvé cette commande en shell qui permet de supprimer un virus a partir d'une liste qui enregistre leurs path:

http://forum.ubuntu-fr.org/viewtopic.php?id=273895

for i in `cat /tmp/scan.txt`; do rm $i;done;


Est-ce que l'équivalent en batch est ceci svp?:

for /f %%i in (type  c:/scan.txt); do (del %%i) 


Merci

Scripteur
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 10 juin 2018 à 13:44
Oui
0
Du coup, en partant du principe que j'utilise une commande de ClamWin pour supprimer des fichiers,

Je ne pourrais pas supprimer de virus s'il sont dans System32 par exemple (sans être admin)?

Y'a t'il des virus qui arrivent à se loger dedans ou non SVP ?

Merci

Scripteur
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
10 juin 2018 à 13:57
Oui les virus arrivent à se loger dedans.

ClamWin possède les droits administrateur, sinon il ne servirait à rien.
0
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
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
10 juin 2018 à 18:32
Non ce n'est pas possible.

Je ne veux même pas savoir ce que tu es en train de faire.
0
La commande ping n'était qu'un exemple...
0
"Je ne veux même pas savoir ce que tu es en train de faire. "

Je souhaite simplement automatiser une tache

La commande ping n'était qu'un exemple...

Je suis obligé de faire plusieurs scripts ?

C'est la dernière question que je vous pose, promis, après je met le sujet en résolue

Scripteur
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
10 juin 2018 à 20:19
Oui tu es obligé de faire plusieurs scripts.

Tu peux poser autant de questions que tu veux, ça ne me dérange pas de répondre.

J'ai juste du mal à cerner tes intentions.
0
Croyez-moi, je ne fabrique pas de trojan^^

Je cherche juste à exécuter plusieurs commande de clamscan.exe... pour pas que cela ne soit trop long en vus de les automatiser

Je réalise plusieurs taches en batch que je devais faire depuis longtemps, et j'en ai profité pour vous bombardé de question tans que vous étiez dispo..
0