2017-03-20 3 views
0

次実行した場合とELSEブロック/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には>設定sqlpackage_path = C:\プログラムファイル\(x86の)のMicrosoft SQL サーバー\ 130 \ DAC \ビン\のsqlpackage.exe

C:\ tempに>存在する場合、C:\プログラムファイル(x86の)\のMicrosoft SQL 130 \ DAC \ビン\のsqlpackage \ サーバー.exe(

C:\ tempに>エコーC:\プログラムファイル(x86の)\のMicrosoft SQL 130 \ DAC \ビン\のsqlpackage.exeは、Cが存在するサーバー\:\プログラムファイル (x86の)\ Microsoft SQL Serverの\ 130 \ DACを\ビン\のsqlpackage.exeは存在

C:\ tempに>エコーC:\プログラムファイル(x86の)\のMicrosoft SQL 130は、\ DAC \ビン\のsqlpackage.exeはC存在しないサーバー\:\プログラムファイル を(私はIFライン上の周りの "%sqlpackage_path%" を引用符を入れしようとしたときのx86)のMicrosoft SQL Serverの\ \ 130 \ DAC \ビン\のsqlpackage.exeが

存在しない、私はこのメッセージが表示されます。

マイクロソフト\

は、このファイルの存在を確認するための正しい構文である何、この時点で

予想外でしたか?

答えて

1

環境変数は、かっこを含む文字列に評価されます。これらは文字通り構文の一部として取られます。あなたはechoコマンドからの出力で引用符を使用しないように必要がある場合は

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 
) 

、利用遅れ拡張:あなたは、特に場合は、他のブロックの内側に、引用符で囲む必要があり、ファイルの先頭にsetlocal enabledelayedexpansionを追加します"%sqlpackage_path%"の代わりに!sqlpackage_path!を使用してください。

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命令を閉じるという基本的な問題があります。

関連する問題