Skip to content

Instantly share code, notes, and snippets.

@pgbrandolin
Created April 11, 2020 06:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pgbrandolin/ba22f1d36486899a06d7c15c6ecdef96 to your computer and use it in GitHub Desktop.
Save pgbrandolin/ba22f1d36486899a06d7c15c6ecdef96 to your computer and use it in GitHub Desktop.
[checklockn.bat] Controllo del lock di un file in Windows #dos #lock
@echo off
SETLOCAL EnableDelayedExpansion
rem.
rem Testing availability of external programs
rem.
set "THEGNUBIN=C:\Program Files (x86)\GnuWin32\bin"
where /q "%THEGNUBIN%:find.exe" || ECHO Could not find GNUWin32 find.exe && EXIT /B
where /q "%THEGNUBIN%:date.exe" || ECHO Could not find GNUWin32 date.exe && EXIT /B
rem.
rem DAYSKEEP : n. di giorni da mantenere
rem THEDIR? : directory da controllare e da inserire nel ciclo for (se non nulle!)
rem THELOCK : da valutare file per file
rem.
set "DAYSKEEP=30"
set "THEFILE=%~1"
set "THELOCK=N/A"
set "THEDIR1=D:\ateikon-im\zz_temp"
set "THEDIR2=D:\ateikon-im\zzz_delete"
set "THEDIR3="
set "THEDIR4="
rem.
rem Calcolo preliminare della data di oggi (in secondi dal 1/1/1970)
FOR /F "tokens=*" %%F IN ('"%THEGNUBIN%\date.exe" +%%s') DO (SET "THISDATES=%%F")
echo s: !THISDATES!
rem Versione con find
rem.
for %%i in ("%THEDIR1%" "%THEDIR2%" ) do (
rem echo Scansione directory: %%i
FOR /F "tokens=* usebackq " %%F IN (`CALL "%THEGNUBIN%\find.exe" "%%i" -maxdepth 1 -type f`) DO (
2>nul ( >>%%F (call ) ) && ( set "THELOCK=NO" ) || ( set "THELOCK=YES" )
rem echo File: -%%F- lock: !THELOCK!
rem Non si considerano i file nello stato di lock (un processo li sta usando)
IF !THELOCK! == NO (
rem Scomposizione del pathname nelle sue componenti: drive,path,name
set "MYDRIVE=%%~dF"
set "MYPATH=%%~pF"
set "MYNAME=%%~nF"
rem Estrazione della data yyyymmdd dalla posizione in cui si trova
set "MYDATE=!MYNAME:~0,8!"
rem Trasformazione della data del file (in secondi dal 1/1/1970)
FOR /F "tokens=*" %%F IN ('"%THEGNUBIN%\date.exe" -d !MYDATE! +%%s') DO (SET "FILEDATES=%%F")
rem Calcolo della differenza in secondi tra oggi e la data del file
set /a DAYDIFF=!THISDATES! - !FILEDATES!
set /a DAYDIFF=!DAYDIFF! / 60 / 60 / 24
rem echo info: %%F -- !MYPATH! -- !MYDATE! now:!THISDATES! file:!FILEDATES! - !DAYDIFF!
IF !DAYDIFF! GTR !DAYSKEEP! (
echo CANCELLO: %%F -- days: !DAYDIFF! keep: !DAYSKEEP!
) else (
echo conservo: %%F -- days: !DAYDIFF! keep: !DAYSKEEP!
)
) ELSE (
echo File in stato di lock: %%F
)
)
)
rem.
goto :Continue
rem.
rem End of script
rem.
:Continue
exit /b 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment