我和我的同事整天都在为此烦恼。
我们有一个简单的 Windows 批处理文件。我们希望它从我们以编程方式生成其文件路径的文本文件中读取,获取该文件中的单个数值,并将其与局部变量进行比较。但是我们得到了完全莫名其妙的行为。
该文件包含一个标量数字,例如数字 2。代码如下:
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.
因此我们插入了一些跟踪消息,以防万一出现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
我们只看到第一条跟踪消息(在if
语句之前),没有看到第二条跟踪消息。所以我们的结论是文件的内容以某种方式被插入到 lineif exist "%HOMEPATH%\ourcompanyname\%ThisAppFlagFileName%"
中,但是我们当然不明白为什么第一个if not exist
有效,而第二个无效。
请问有人能看出错误吗?环境是Windows 7cmd.exe
窗口,但我们希望同时部署到Windows 7和Windows XP。