IF / ELSE执行两个块

时间:2017-03-20 14:12:16

标签: batch-file

以下执行IF和ELSE块

@Override
public void onCheckedChanged(RadioGroup group, int id) {

    string text = ((TextView)group.findViewById(id)).getText();
    Toast toast = Toast.makeText(this, text, duration);
    toast.show();
}

结果如下:

  

C:\ temp>设置sqlpackage_path = C:\ Program Files(x86)\ Microsoft SQL   服务器\ 130 \ DAC \ BIN \ sqlpackage.exe

     

C:\ temp>如果存在C:\ Program Files(x86)\ Microsoft SQL   Server \ 130 \ DAC \ bin \ sqlpackage.exe(

     

C:\ temp> echo C:\ Program Files(x86)\ Microsoft SQL   Server \ 130 \ DAC \ bin \ sqlpackage.exe存在C:\ Program Files   (x86)\ Microsoft SQL Server \ 130 \ DAC \ bin \ sqlpackage.exe存在

     

C:\ temp> echo C:\ Program Files(x86)\ Microsoft SQL   Server \ 130 \ DAC \ bin \ sqlpackage.exe不存在C:\ Program Files   (x86)\ Microsoft SQL Server \ 130 \ DAC \ bin \ sqlpackage.exe不存在

当我尝试在IF行的“%sqlpackage_path%”周围添加引号时,收到此消息:

  

\微软此时出人意料

检查此文件是否存在的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

您的环境变量的计算结果为包含括号的字符串。这些作为语法的一部分。您需要将它们括在引号中,尤其是在if和else块中:

set sqlpackage_path=%ProgramFiles(x86)%\Microsoft SQL Server\130\DAC\bin\sqlpackage.exe

if exist "%sqlpackage_path%" (
    echo "%sqlpackage_path%" exists
) else (
    echo "%sqlpackage_path%" does not exist
)

如果您需要避免在echo命令的输出中使用引号,请使用延迟扩展:在文件开头添加setlocal enabledelayedexpansion,并使用!sqlpackage_path!代替{{ 1}}。

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
set "sqlpackage_path=%ProgramFiles(x86)%\Microsoft SQL Server\130\DAC\bin\sqlpackage.exe"

FOR /f "tokens=1*delims==" %%a IN ('set sqlpackage_path') DO IF /i "%%a"=="sqlpackage_path" (
 if exist "%%b" (
 echo %%b exists
 ) else (
 echo %%b does not exist
 )
)
GOTO :EOF

保持对实际路径名的评估,直到最后一刻。

基本问题是变量中的)会关闭if-true指令。