Page 1 of 1
Third module to a batch file
Posted: 11 Sep 2016 03:57
by xendistar
I currently have a batch file that does two things
1) It deletes specific files (.jpg & .pdf) older than X days old in a specific directory and sub folders
2) It scans subfolder of the same directory (above) and delete specific files extension (.jpg & .pdf)
This runs daily on a 2008R2 Server, it is (probably) not fancy, but it gives me the results I want and as I am happy to leave it as it is.
What I would like to do is to add a third module to my batch file which will delete any specific files (.jpg) over a certain size say 1536kb (this size may change) when the batch file runs. If I can get a small script to do this I may even opt to run this as a separate script and run it several times a day. The path the files reside in is
m:\global\pix\pix
Can anybody offer any suggestions please?
Re: Third module to a batch file
Posted: 11 Sep 2016 12:17
by aGerman
The unit of file sizes in batch is bytes. You can determine them using the ~z modifier of FOR variables. E.g.
Code: Select all
for %%i in ("m:\global\pix\pix\*.jpg") do echo %%~zi (%%i)
Just insert an IF statement in order to process files greater than a certain size.
Code: Select all
for %%i in ("m:\global\pix\pix\*.jpg") do if %%~zi gtr 1572864 echo "%%i"
(replace ECHO with DEL to delete the files)
Problem is that batch only supports signed integers with a width up to 32 bits. That means the greatest number that you can compare numerically is 2147483647.
Steffen
Re: Third module to a batch file
Posted: 12 Sep 2016 14:33
by xendistar
Thanks eGerman, I will have a play and see how I get on
Re: Third module to a batch file
Posted: 14 Sep 2016 11:07
by pieh-ejdsch
use an empty Folder and robocopy.
Code: Select all
@echo off
setlocal
set "T=%temp%\DF%time::=%"
md "%T%" ||exit /b 1
PushD "%T%"
:List
rem Delim=TAB
rem minage - not before
for /f "tokens=3 delims= " %%D in (
'robocopy /L /fp /np /njh /njs /mir "m:\global\pix\pix" "%T%" "*.jpg" "*.pdf" /minage:25 /min:1572864 /XX /NDL'
) do echo del "%%D"
popD
rd "%T%"
exit /b 0
Phil
Re: Third module to a batch file
Posted: 14 Sep 2016 12:29
by xendistar
pieh-ejdsch wrote:use an empty Folder and robocopy.
Code: Select all
@echo off
setlocal
set "T=%temp%\DF%time::=%"
md "%T%" ||exit /b 1
PushD "%T%"
:List
rem Delim=TAB
rem minage - not before
for /f "tokens=3 delims= " %%D in (
'robocopy /L /fp /np /njh /njs /mir "m:\global\pix\pix" "%T%" "*.jpg" "*.pdf" /minage:25 /min:1572864 /XX /NDL'
) do echo del "%%D"
popD
rd "%T%"
exit /b 0
Phil
Hi Phil
Can you explain what each line is doing , I have an idea of bits of it but not most of it
Re: Third module to a batch file
Posted: 14 Sep 2016 13:57
by foxidrive
xendistar wrote:Thanks eGerman, I will have a play and see how I get on
It would repay the kindness if you let aGerman know how you got on.
Re: Third module to a batch file
Posted: 17 Sep 2016 16:46
by xendistar
foxidrive wrote:xendistar wrote:Thanks eGerman, I will have a play and see how I get on
It would repay the kindness if you let aGerman know how you got on.
I had every intention of replying to eGerman (and anybody else who offered a solution once I had tried them), it has just taken me longer to try eGerman's script than I had intended. I asked Phil the question regarding his script simply as I was reading his contribution over a cup of tea and to be perfectly honest I could not make head of tail of it (I understood just about eGerman's script).
In regards to eGerman's script it worked perfectly in the tests I have run on a folder with 142 mixed files types, of which 72 are .jpg and 27 of those .jpg have a size greater than 1572864. When I get the time next week I will try the script for real.
My thanks to eGerman