兩個錯誤,其實。好吧ee,也許。
當然,ELSE
和(
之間缺失的空間,然後還有的arithmetic
奇怪的拼寫 - 這是至關重要的。 DOS無法處理拼寫錯誤。
那麼,在現實中,我試着簡單地使用space-after-else修復這個批處理。它墜毀了。它真的做到了!一次,it crashed
是準確的。嗯 - CMD沒有實際上崩潰,它只是返回到提示。沒有錯誤信息 - 沒有。再次彈出提示。
所以我通過刪除=
後的空格來「固定」set /p
。這似乎解決了這個問題,因爲下一次愉快地出現提示,然後一切順利。
所以我決定修復jeb
的觀點。當然 - 輸入像(3*3)+42
這樣的表達式,然後得到一個不正確的結果,並且您會收到一個難看的異議。
這最後一個行爲的原因是語句是PARSED(解碼和驗證)任何%var%被它在PARSED時的值替換。 然後該聲明被執行。
結果,如果我進入(3*3)+42
和56
,原始表達式會被解析爲
IF 56 == 51 (ECHO Your...right!) ELSE (ECHO Your...wrong!&ECHO (3*3)+42 = 51)
現在這個[批量,你可以通過用&
分離級聯命令]驗證失敗,因爲對於解析器來說ELSE
表達式在閉合括號之後結束3*3
種
@ECHO OFF
setlocal
SET /p exp="Enter Arithmetic Expression:"
SET /p ans1="Enter Expression's Product:"
REM calculating the arithmetic expression:
SET /a ans2= %exp%
::
:: Way the first
::
FOR /f "delims=" %%i IN ("%exp%") DO (
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %%i = %ans2%
)
)
::
:: Way the second
::
FOR /f "tokens=1*delims==" %%i IN ('set exp') DO (
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %%j = %ans2%
)
)
::
:: Way the third
::
SET refexp=%exp:)=^^)%
IF %ans1% == %ans2% (
ECHO Your answer is right!
) ELSE (
ECHO Your answer is wrong!
ECHO %refexp% = %ans2%
)
ECHO Note: 'SET exp' returns
SET exp
的第一和第二溶液使用FOR /F
命令的分析能力(見FOR /?
從提示。)這裏的關鍵是,如果表達可被誘導到metavariable
(循環控制變量),那麼它可以直到運行時纔會被評估,並且解析器已經驗證了表達式。
第三種解決方案是在"escape"
之前加上一個加號(^
)作爲前綴(見SET /?
)。當一個字符被轉義時,它在批處理語言中的特殊含義被忽略,並且就像任何其他字符一樣。在這種情況下,由於插入符號本身是一個特殊含義的特殊字符,它本身需要被插入符號...
但奇怪的是,當我重新運行程序後=
重新插入,它愉快地跑。奇怪...
你從cmd.exe得到一個描述性的錯誤信息,'ELSE('不起作用,'IF /?'的幫助顯示正確的語法 – jeb 2013-03-23 08:15:57
Btw。下一個不太明顯的標誌當exp包含括號時,出現在'ECHO%exp%=%ans2%'中 – jeb 2013-03-23 08:17:24