Batch file IF/ELSE执行两个块

Batch file IF/ELSE执行两个块,batch-file,Batch File,下面执行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 ) 结果是: C:\temp>set-sqlpackage\u p

下面执行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
)
结果是:

C:\temp>set-sqlpackage\u path=C:\Program Files(x86)\Microsoft SQL 服务器\130\DAC\bin\sqlpackage.exe

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

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

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

当我尝试在IF行的“%sqlpackage\u path%”周围加引号时,我收到以下消息:

\微软此时出人意料


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

您的环境变量的计算结果是一个包含括号的字符串。这些括号是语法的一部分。您需要将它们括在引号中,尤其是在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\u path!
而不是
%sqlpackage\u path%”

将实际路径名的计算保留到最后一刻

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

@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