无论循环内的值如何,.bat脚本都在评估else语句

时间:2015-05-06 17:18:54

标签: windows batch-file scripting

我有这个代码块:

@echo off

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist "%%d:\Program Files (x86)\" (
    cd /d "%%d:\Program Files (x86)\"
  ) else ( 
     cd /d "%%d:\Folder\subfolder" 2>nul && goto :break
  )
)

:break
if %errorlevel% equ 0 (
  echo "Success, CDing to file location"
) else (
  echo FAILURE
)

即使程序文件文件夹明显存在并且它对其执行CD,它也会在每次运行时打印失败。它不应该尝试评估错误条件,除非第一个失败。是什么给了什么?

1 个答案:

答案 0 :(得分:1)

@echo off
    setlocal enableextensions disabledelayedexpansion

    (for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
        vol %%d: && (
            cd /d "%%d:\Program Files (x86)\" && goto :break
            cd /d "%%d:\Folder\Subfolder\"    && goto :break
        )
    )) >nul 2>nul 

:break
    if errorlevel 1 (
        echo FAILURE
    ) else (
        echo "Success, CDing to file location"
    )

vol用于测试驱动器是否存在(我必须包含它以避免某些读卡器出现问题)。

如果任何cd操作有效,请退出for循环。

如果存在错误级别,则先前的代码失败。