Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

i just need a help on the if condition in the below sample batch script code, how do I implement an if and else if condition? if else doesnt recognize in my .bat file when running inw windows command:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // constant variables
set "_ROOT=%~dp0." & rem // (common root directory; `%~dp0.` is script's parent, `.` is current)
set "_DIR1=%_ROOT%Directory1" & rem // (1st directory containing files)
set "_DIR2=%_ROOT%Directory2" & rem // (2nd directory containing files)
set _MASKS="*INV*" "*SLS*"     & rem // (list of quoted file masks)
set "_TMP1=%TEMP%\%~n0_1_%RANDOM%.tmp" & rem // (1st temporary file)
set "_TMP2=%TEMP%\%~n0_2_%RANDOM%.tmp" & rem // (2nd temporary file)

rem // Resolve 1st directory to be an absolute path:
for %%E in ("%_DIR1%") do set "RDIR1=%%~fE"
rem // Resolve 2nd directory to be an absolute path:
for %%E in ("%_DIR2%") do set "RDIR2=%%~fE"

rem // Write all matching files in 1st directory to 1st temporary file:
pushd "%RDIR1%" && (
    for %%F in (%_MASKS%) do (
        echo(%%~nxF
    )
    popd
) > "%_TMP1%"
rem // Write all matching files in 2nd directory to 2nd temporary file:
pushd "%RDIR2%" && (
    for %%F in (%_MASKS%) do (
        echo(%%~nxF
    )
    popd
) > "%_TMP2%"

rem // Loop over all common files from both temporary files:
for /F %%L in ('findstr /L /I /X /G:"%_TMP1%" "%_TMP2%"') do (
    rem // Build absolute `wmic`-compatible file paths:
    set "FILE1=%RDIR1:=\%\%%L" & set "FILE2=%RDIR2:=\%\%%L"
    setlocal EnableDelayedExpansion
    rem set "FILE1=%!FILE1:&=&!" & set "FILE2=%!FILE2:&=&!"
    rem // Get standardised file date/time (last modification) of 1st file by `wmic`:
    for /F %%K in ('wmic DataFile where "Name='!FILE1!'" get LastModified') do set "DATE1=%%K"
    rem // Get standardised file date/time (last modification) of 2nd file by `wmic`:
    for /F %%K in ('wmic DataFile where "Name='!FILE2!'" get LastModified') do set "DATE2=%%K"
    rem // Compare file dates/times (last mod.) of both files and return differing ones:

    if !DATE1! gtr !DATE2! (echo "!FILE1:\=!" is newer than "!FILE2:\=!")
   else if !DATE1! leq !DATE2! (echo "!FILE1:\=!" is older than "!FILE2:\=!")
   else if !DATE1! equ !DATE2! (echo "!FILE1:\=!" is same with  "!FILE2:\=!")


    endlocal
)

rem // Clean up temporary files:
del "%_TMP1%" "%_TMP2%"

endlocal
exit /B

This would be a very much help. Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
290 views
Welcome To Ask or Share your Answers For Others

1 Answer

Use lss instead of leq. So we will have "less than", "greater than" and "equal to", which seems to be what you want.

The correct method of using else in this instance would be:

if !DATE1! gtr !DATE2! (
     echo "!FILE1:\=!" is newer than "!FILE2:\=!"
   ) else if !DATE1! lss !DATE2! (
          echo "!FILE1:\=!" is older than "!FILE2:\=!"
    ) else if !DATE1! equ !DATE2! (
           echo "!FILE1:\=!" is same with  "!FILE2:\=!"
)

However, We do not need else in this instance as each line will be evaluated until one returns true, so you could just do:

if !DATE1! gtr !DATE2! echo "!FILE1:\=!" is newer than "!FILE2:\=!"
if !DATE1! lss !DATE2! echo "!FILE1:\=!" is older than "!FILE2:\=!"
if !DATE1! equ !DATE2! echo "!FILE1:\=!" is same with  "!FILE2:\=!"

I suggest you read the help, open cmd.exe and run:

  • if /?

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...