[英]Batch file loop issues
我的批處理文件中存在循環問題。 使用set命令時,我給用戶兩個選擇。 第一個選項工作正常,但第二個選項被忽略,除非進行循環功能重新提問。 然后它接受第二個選項的輸入。
:WithAccess
cls
If not exist "C:\Program Files (x86)\Microsoft Office\Office15\Winword.exe" (
goto UninstallViewers
:WithAccess2
echo Installing MS Office 2013 x32 With Access...
start /wait "" "MS Office 2013 x32 Installers\MSOfficeWithAccess"
echo Installation Complete.
) Else (
echo Microsoft Office 2013 might already be installed.
set /p op4=Do you want to run installer anyway? [Y/N]:
If "%op4%"=="y" goto WithAccess2
If "%op4%"=="n" goto end
echo That's not a valid option.
goto WithAccess
)
因此,在這個if語句的“Else”部分中,當用戶選擇選項2或“n”時,它將忽略它並移動到它之后的任何代碼。 在這種情況下,它循環回到此代碼段的開頭。 但是在循環之后,它現在接受用戶輸入並正確跳轉到“結束”標簽。
在玩完之后我發現刪除這個段周圍的標簽可以修復它,但是如果用戶發出錯誤就會這樣做,它就不會循環回來並重新提問。 最初我的“Else”聲明看起來像這樣:
Else (
echo Microsoft Office 2013 might already be installed.
:Loop2
set /p op4=Do you want to run installer anyway? [Y/N]:
If "%op4%"=="y" goto WithAccess2
If "%op4%"=="n" goto end
echo That's not a valid option.
goto Loop2
)
因此理想情況下循環相同的問題,但顯然發生了同樣的問題。 我試圖尋找答案,但很難找到這樣一個特定的編碼問題。 任何幫助,將不勝感激。
將標簽放在括號內的代碼塊中是不好的做法 。 如果goto label
並且該標簽位於代碼塊內,則執行的線程會落在標簽上,認為它不再位於代碼塊內,並且會出現問題。 您應該重新編寫腳本流程的邏輯。 將標簽移到任何括號之外,當你想調用一個函數然后返回繼續解析下一行時,考慮使用call
而不是goto
。 您甚至可能會發現從函數中不時返回值很有用。 另外,使用if /i
進行不區分大小寫的測試。
:WithAccess
cls
If not exist "C:\Program Files (x86)\Microsoft Office\Office15\Winword.exe" (
call :UninstallViewers
) Else (
echo Microsoft Office 2013 might already be installed.
set /p "op4=Do you want to run installer anyway? [Y/N]: "
setlocal enabledelayedexpansion
If /I "!op4!"=="y" goto WithAccess2
If /I "!op4!"=="n" goto :EOF
endlocal
echo That's not a valid option.
goto WithAccess
)
:WithAccess2
echo Installing MS Office 2013 x32 With Access...
start /wait "" "MS Office 2013 x32 Installers\MSOfficeWithAccess"
echo Installation Complete.
:: end main runtime
goto :EOF
:UninstallViewers
:: (or whatever code you have to do the uninstalling)
wmic product where "name like '%%viewer%%' and vendor like '%%microsoft%%'" call uninstall
goto :EOF
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.