Comparing the size of two files turns out to be non-trivial as the the maximum size of a numeric variable is 11 digits and a character compare requires that the two fields be of equal size.
I have scripted CompSize.bat to circumvent these issues.
The syntax for using CompSize.bat is:
call CompSize File1 File2
where File1 and File2 are the fully qualified paths to the files to be compared.
Samples
Call CompSize c:\pagefile.sys \\<Computername>\c$\pagefile.sysCall CompSize "C:\Documents and Settings\%UserName%\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\backup01.log" "C:\Documents and Settings\%UserName%\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data\backup02.log"
CompSize.bat returns a $Size environment variable with the results of the compare:
LSS | File1 is Less Than File2. |
EQU | File1 is Equal To File2. |
GTR | File1 is Greater Than File2. |
ERR | Syntax Error. |
In addition to testing %$Size% with an IF statement (if "%$Size%" EQU "GTR" goto greater), you can also build a GOTO:
call CompSize c:\hiberfil.sys c:\pagefile.sys
goto lbl%$Size%
:lblERR
@echo ERR
goto :EOF
:lblLSS
@echo LSS
goto :EOF
:lblEQU
@echo EQU
goto :EOF
:lblGTR
@echo GTR
CompSize.bat contains:
@echo off
setlocal
if \{%2\}==\{\} goto syntax
if not exist %1 goto syntax
if not exist %2 goto syntax
for /f "Skip=6 Tokens=2,3" %%s in ('dir %1') do if /i "%%s" EQU "File(s)" set sz1=%%t
set sz1=%sz1:,=%
set sz1=%sz1% 000000000000000000
for /f "tokens=1,2" %%s in ("%sz1:~,18%") do set sz1=%%t%%s
for /f "Skip=6 Tokens=2,3" %%s in ('dir %2') do if /i "%%s" EQU "File(s)" set sz2=%%t
set sz2=%sz2:,=%
set sz2=%sz2% 000000000000000000
for /f "tokens=1,2" %%s in ("%sz2:~,18%") do set sz2=%%t%%s
if "%sz1%" LSS "%sz2%" set $size=LSS&goto return
if "%sz1%" EQU "%sz2%" set $size=EQU&goto return
set $size=GTR
:return
endlocal&set $size=%$size%
goto :EOF
:syntax
@echo CompSize File1 File2
set $size=ERR
endlocal&set $size=%$size%
NOTE: See General purpose zero fill (padding) routine.