[batch] action selon date du fichier
Résolu/Fermé
danieliiitooo
Messages postés
20
Date d'inscription
jeudi 30 octobre 2008
Statut
Membre
Dernière intervention
1 octobre 2010
-
22 déc. 2008 à 20:43
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 25 déc. 2008 à 19:01
danieliiitooo Messages postés 20 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 1 octobre 2010 - 25 déc. 2008 à 19:01
A voir également:
- [batch] action selon date du fichier
- Fichier rar - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Fichier batch - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
1 réponse
mikebzh
Messages postés
127
Date d'inscription
samedi 20 décembre 2008
Statut
Membre
Dernière intervention
11 mars 2009
28
22 déc. 2008 à 21:26
22 déc. 2008 à 21:26
Coucou
Va faire un tour par là cela devrait t'intéresser
http://www.commentcamarche.net/forum/affich 9282887 programme batch dos probleme if
Et oui faut fouiller les gars
A plus
Va faire un tour par là cela devrait t'intéresser
http://www.commentcamarche.net/forum/affich 9282887 programme batch dos probleme if
Et oui faut fouiller les gars
A plus
25 déc. 2008 à 19:01
Merci pour le lien, celui-ci m'a donné quelques idées quand à la piste à suivre.
Ci-dessous le fameux script désormais au complet.
La partie à problème, object de ma requête, est assez longue. Aussi, n'hésitez pas à citer des points d'amélioration.
(Je sais qu'il est possible de combiner les fonctions FOR & FIND mais ne maîtrise pas le process)
Merci d'avance,
@echo off
color 70
cls
rem ---------------------------------------------------------------------------------------------------------------------------
rem Save OS time as three variables / Note that OS format date must be HH:mm ss AM
rem ---------------------------------------------------------------------------------------------------------------------------
rem Save OS time as a variable
Set "OS_Time=%TIME%"
Echo OS Time is: %TIME%
rem Remove first caracter if it is a 0 and save OS time hour as a variable
If "%OS_Time:~0,1%" == "0" (SET "OS_Time_hour=%OS_Time:~1,1%") else (SET "OS_Time_hour=%OS_Time:~0,2%")
Echo OS Time hour is: %OS_Time_hour%
rem Save OS time minutes as a variable
Set "OS_Time_minutes=%OS_Time:~3,2%"
echo OS Time minutes are: %OS_Time_minutes%
rem Save OS time AM-PM as a variable
Set "OS_Time_AM-PM=%TTIME:~9,2%"
echo OS Time AM-PM is: %OS_Time_AM-PM%
rem --------------------------------------------------------------------------------------------------------------
rem Get number of files and oldest file name as two variables
rem --------------------------------------------------------------------------------------------------------------
set /a nb_of_files=0
if exist "Test\*.pdf" for /f "delims=" %%a in ('dir /o-d /b "Test\*.pdf"') do (
set Oldest_file=%%a
set /a nb_of_files+=1
)
echo Oldest file is %Oldest_file%
echo There are %nb_of_files% .pdf files in the Test folder
rem --------------------------------------------------------------------------------------------------------------
rem Get oldest file time and save it as a variable
rem --------------------------------------------------------------------------------------------------------------
dir Test\%Oldest_file%> Token_1.txt
For /F "skip=5 tokens=1-2 delims= " %%a in (Token_1.txt) do echo %%b >>Token_2.txt
Find /V "(s)" Token_2.txt > Token_3.txt
For /F "skip=2 tokens=*" %%a in (Token_3.txt) do set Oldest_file_time=%%a
echo Oldest file time is: %Oldest_file_time%
del /q Token_2.txt
del /q Token_3.txt
rem --------------------------------------------------------------------------------------------------------------
rem Save oldest file hour and minutes as two variables
rem --------------------------------------------------------------------------------------------------------------
rem Remove first caracter if it is a 0 and save oldest file time hour as a variable
if "%Oldest_file_time:~0,1%" == "0" (SET "Oldest_file_hour=%Oldest_file_time:~1,1%") else (SET "Oldest_file_hour=%Oldest_file_time:~0,2%")
echo Oldest file hour is: %Oldest_file_hour%
rem Save oldest file minutes as a variable
Set "Oldest_file_minutes=%Oldest_file_time:~3,2%"
echo Oldest file minutes are: %Oldest_file_minutes%
rem Save oldest file time AM-PM as a variable
For /F "skip=5 tokens=1-3 delims= " %%a in (Token_1.txt) do echo %%c >>Token_2.txt
Find /V "(s)" Token_2.txt > Token_3.txt
For /F "skip=2 tokens=*" %%a in (Token_3.txt) do set Oldest_file_AM-PM=%%a
echo Oldest file time AM-PM is %oldest_file_AM-PM%
del /q Token_1.txt
del /q Token_2.txt
del /q Token_3.txt
rem -----------------------------------------------------------------------------------------------------------------------------------------
rem Test if OS time - oldest file time > 5 minutes
rem -----------------------------------------------------------------------------------------------------------------------------------------
:Test_Dif_AM-PM
rem Test if OS_time_AM-PM is equal to Oldest_file_Am-PM
if %OS_time_AM-PM% NEQ %Oldest_file_time_AM-PM% (goto Test_Dif_hour_AM-PM_same) else goto Test_Dif_hour_AM-PM_dif
goto :End
:Test_Dif_hour_sup_1
rem Test if OS_Time_hour - Oldest_file_hour is greater than 1 hour
set /a Test_hour_sup_1 = %OS_time_hour% - %Oldest_file_hour%
echo %OS_time_hour% - %Oldest_file_hour% = %Test_hour_sup_1%
if %Test_hour_sup_1% GTR 1 (goto Alert_mail) else goto Test_Dif_min_sup_5
goto :End
:Test_Dif_min_sup_5
rem Test if OS_Time_minutes - Oldest_file_minutes is greater than 5 minutes
set /a Test_min_sup_5 = %OS_time_minutes% - %Oldest_file_minutes%
echo %OS_time_minutes% - %Oldest_file_minutes% = %Test_min_sup_5%
if %Test_min_sup_5% GTR 5 (goto Alert_mail) else goto End
goto :End
:Test_Dif_hour_inf_-11
rem Test if OS_Time_hour - Oldest_file_hour is less than 11 hour
set /a Test_hour_inf_-11 = %OS_time_hour% - %Oldest_file_hour%
echo %OS_time_hour% - %Oldest_file_hour% = %Test_hour_inf_-11%
if %Test_hour_inf_-11% LSS -11 (goto Alert_mail) else goto Test_Dif_min_inf_-55
goto :End
:Test_Dif_min_inf_-55
set /a Test_min_inf_-55 = %OS_time_minutes% - %Oldest_file_minutes%
echo %OS_time_minutes% - %Oldest_file_minutes% = %Test_min_inf_-55%
if %Test_min_inf_-55% LSS -55 (goto Alert_mail) else goto End
goto :End
:Alert_email
rem ------------------------------------------------------------------------------------------------------------------------------
rem Send an e-mail alert
rem -----------------------------------------------------------------------------------------------------------------------------
postie\postie -host:Mail server -to:email adress-from:email adress-s:"Subject" -msg:"There are currently %nb_of_file% in the FTP folder. Oldest file time is %Oldest_file_time%. Please connect to XXXX to check what is up."
goto End
:End
L'objectif de ce script était pour rappel, de détecter si les fichiers stockés dans un répertoire (Dans cet exemple Test\. En réalité le répertoire désigné par le FTP virtuel de Win2K) n'ont pas été traités depuis 5 minutes.
Si c'est le cas, envoyer une alerte par e-mail via Postie.
La contrainte était un OS US avec format de date et d'heure US.
Le batch sera schédulé toutes les 5 minutes. (Voir 10 minutes, j'attend la fin des vaccances pour compléter le test)
Bonne soirée et joyeuses fêtes.
Cordialement,
Daniel