if exist %A%\NUL を使ったディレクトリ判断について、
昨日、空白を含んでいるとだめだと書いたが、それは正しくないようだ。
if exist "C:\Program Files\NUL" | 偽 |
if exist C:\Program Files\NUL | 構文不正 |
if exist "C:\PROGRA~1\NUL" | 偽 |
if exist C:\PROGRA~1\NUL | 真 |
if exist "C:\WINDOWS\NUL" | 偽 |
if exist C:\WINDOWS\NUL | 真 |
if exist "C:\WINDOWS\desktop.ini" | 真 |
偽となっているものはすべて本当は真のはず。
つまり、" " で囲まれていると、NULが存在しないと間違った判断をしてしまう。
NUL,CONのような特殊名でないファイルは " " で囲んでも正しく判断される
空白を含んでいると " " で囲まざるを得ないため結果的には間違った判断となる。
つまり、NUL,CONのようなデバイスファイルの存在チェック時には " " で囲んではいけない。
ってどうもバグのように思えるので、いずれもう少し調べてみたい。
対処法は、昨日書いたものに加えて、コメント*1でいただいた次のものでもOK。
type %A%\NUL >NUL 2>NUL & if %ERRORLEVEL%==0 echo ディレクトリ
type でなく copy 等でもいい。とにかく、if exist だけが特殊なようだ。
*1:オリジナルサイトでのコメントの話なのでこのサイトではコメントは付いてない