IF и ELSE IF помощь кода - пакетные сценарии - PullRequest
0 голосов
/ 18 марта 2019

Мне просто нужна помощь по условию if в приведенном ниже примере кода пакетного сценария, как мне реализовать условие if и else if? если еще не распознается в моем .bat файле при запуске команды inw windows:

@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

Это очень помогло бы. Спасибо

1 Ответ

0 голосов
/ 18 марта 2019

Используйте lss вместо leq. Таким образом, у нас будет "меньше, чем" , "больше, чем" и ", равное" , что, кажется, то, что вы хотите.

Правильный метод использования else в этом случае:

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:\\=\!"
)

Однако , нам не нужно else в этом случае, поскольку каждая строка будет оцениваться до тех пор, пока одна из них не вернет true, поэтому вы можете просто сделать:

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:\\=\!"

Я предлагаю вам прочитать справку, откройте cmd.exe и запустите:

  • if /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...