【问题标题】:IF and ELSE IF code help - Batch ScriptingIF 和 ELSE IF 代码帮助 - 批处理脚本
【发布时间】:2019-03-18 06:34:55
【问题描述】:

我只需要以下示例批处理脚本代码中的 if 条件的帮助,如何实现 if 和 else if 条件? if else 在运行 inw windows 命令时无法识别我的 .bat 文件:

@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

这将是一个很大的帮助。谢谢

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    使用lss 代替leq。所以我们会有“小于”“大于”“等于”,这似乎是你想要的。 p>

    在这种情况下使用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 /?

    【讨论】:

    • 尝试了@Gerhard 的新更改,但它似乎显示了输出,但现在有一个本机错误,我预计 DATE1 大于 DATE2,但它表明 DATE1 和 DATE2 相等。
    • 但是回显日期以查看它们的外观,请在您的问题中告诉我
    • “DATE1=20190318040549.218407+480”和“DATE2=20190318095134.760320+480”@Gerhard
    • 所以这应该在某个地方进行转换以适应条件?假设:Directory1 中的 FFPDFINV06 具有 DATE1 = 3/18/2019 2:47 PM 并且 Directory2 具有 DATE2 = 3/18/2019 9:50 PM,它应该期望输出 DATE2 是最新文件,而不是旧文件,并且不一样文件。
    • 是的,因此您需要使您的转换适合场景。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多