[英]Problems reading simple numeric values from files in Windows batch files
我和我的同事整天都在拉扯頭發。
我們有一個簡單的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
語句之前),而沒有看到第二個跟蹤消息。 因此,我們的結論是, if exist "%HOMEPATH%\\ourcompanyname\\%ThisAppFlagFileName%"
,則文件內容 if exist "%HOMEPATH%\\ourcompanyname\\%ThisAppFlagFileName%"
某種方式插值到該行中,但是我們當然不明白為什么第一個( if not exist
起作用,而第二個卻if not exist
沒錯
任何人都可以發現錯誤嗎? 環境是Windows 7 cmd.exe
窗口,但是我們希望同時部署到Windows 7和Windows XP。
您的代碼有幾個錯誤。 第一行:
ThisAppFlagFileName=foo.txt
錯過了set
命令,因此嘗試將其作為ThisAppFlagFileName
命令執行。 這意味着您的程序中未定義ThisAppFlagFileName
變量 ,因此永遠不會從文件中讀取InstalledVersion
變量。
對InstalledVersion
變量的所有引用都必須使用Delayed Expansion,也就是說,將它們括在感嘆號之間,而不是百分數之間,並在程序開始時包含setlocal EnableDelayedExpansion
命令。
setlocal EnableDelayedExpansion
set 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
您必須意識到,所有在括號內修改的變量也必須用感嘆號代替百分號。 搜索“延遲擴展”以獲取詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.