Scripts batch
Résolubarnabe0057 Messages postés 14431 Date d'inscription Statut Contributeur Dernière intervention -
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
- Script batch utile
- Fichier batch - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Batch converter - Télécharger - Photo & Graphisme
- Script vidéo youtube - Guide
7 réponses
La problématique porte sur la détection par un script batch des modifications d'un fichier par une autre application, notamment LibreOffice qui peut modifier ou supprimer un fichier odt. Pour adresser ce besoin, plusieurs réponses évoquent l'utilisation de plusieurs scripts et la gestion des permissions, car les élévations et l'accès en écriture dépendent des droits sur les dossiers. Des éléments techniques proposent aussi l'emploi de la commande START pour lancer plusieurs instances, afin de paralléliser des commandes et gagner en réactivité dans des scénarios d'automatisation. En cas de contraintes, les échanges signalent que les approches dépendent fortement du contexte système et des politiques de sécurité, sans consigne générale unique.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question@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 ;)
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
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
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
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..
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
En passant par liste.txt ça donnerait ça :
ps : voilà la commande pour trouver le hash MD5 d'un fichier quelconque :
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