私の同僚と私は、これについて一日中髪を引っ張っています.
簡単な Windows バッチ ファイルがあります。プログラムでファイル パスを生成しているテキスト ファイルから読み取り、このファイル内の単一の数値を取得し、それをローカル変数と比較します。しかし、私たちは完全に不可解な振る舞いをしています。
このファイルには、数値 2 などの 1 つのスカラー数値が含まれています。コードは次のとおりです。
ThisAppFlagFileName=foo.txt
if not exist "%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%" (
ECHO do something here
) else (
SET /P InstalledVersion=<"%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%"
ECHO We think the file contains: %InstalledVersion%
IF %InstalledVersion% GEQ %ThisVersionInstallDataNum% (
ECHO Version %ThisVersion% of the %ThisAppVisibleName% has already been installed for this user; exiting.
GOTO TheEnd
)
)
:TheEnd
Echo END
読み取りエラーが発生し続ける2 was unexpected at this time.
ので、トレース メッセージを挿入し、問題があった場合に備えて、 2 つの異なるステートメントelse
に固執しました。if
ThisAppFlagFileName=foo.txt
if not exist "%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%" (
ECHO do something here
)
ECHO Trace Message 1 before IF
if exist "%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%" (
ECHO Trace Message 2 after IF before CD
SET /P InstalledVersion=<%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%"
ECHO We think the file contains: %InstalledVersion%
IF %InstalledVersion2% GEQ %ThisVersionInstallDataNum% (
ECHO Version %ThisVersion% of the %ThisAppVisibleName% has already been installed for this user; exiting.
GOTO TheEnd
)
)
:TheEnd
Echo END
また、最初のトレース メッセージ (ステートメントの前)のみが表示され、2 番目のトレース メッセージは表示されません。したがって、私たちの結論は、何らかの形でファイルの内容が行に補間されているということですが、もちろん、最初の機能が機能するのに 2 番目の機能が機能しない理由はわかりません。if
if exist "%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%"
if not exist
誰でも間違いを見つけることができますか?環境は Windows 7cmd.exe
ウィンドウですが、Windows 7 と Windows XP の両方に展開したいと考えています。