2015-08-21 60 views
0

此代碼是我目前正在處理的聊天程序的一部分。 '其他'我的程序的一部分是不起作用的。該程序將退出,而不是去:家庭轉到命令後BATCH程序崩潰

:join 
cls 
if not exist "C:/Users/Public/room.cmd" (
echo No room has been found. 
echo. 
set /p choiceretry=Do you want to retry? y/n 
if "%choiceretry%"=="y" goto join 
if "%choiceretry%"=="n" goto home 
) else (
cls 
"C:/Users/Public/room.cmd" 
echo A room has been found. 
pause >nul 
echo Joining 
set roomjoined=1 
echo %roomjoined% 
goto home 
) 

:home 
echo this finally works 
pause 

我試圖改變的代碼數次開始「迴響加入」

誰知道爲什麼CMD退出...... :)? :) :) 在此先感謝

+0

如果以下答案之一有幫助,請考慮選擇一個以標記爲已接受。 [見本頁](http://meta.stackexchange.com/questions/5234/)解釋爲什麼這很重要。 – rojo

回答

0

問題是你運行room.cmd的方式;你必須使用call從它返回:

call "C:/Users/Public/room.cmd" 

否則,程序將不會從room.cmd返回到運行它原來的批處理文件。

提示:考慮使用choice而不是set /PŸ/ñ決定。

0

首先,請不要左對齊您的代碼塊。閱讀正確縮進的代碼要容易得多。

其次,檢索代碼塊中的值時,需要延遲擴展。有關更多信息,請參閱cmd提示中的setlocal /?這是意外行爲的原因。在您設置了相同圓括號的代碼塊中檢索到的變量將不包含您期望的值,除非您使用延遲擴展語法檢索它們。作爲替代方案,您可以使用choice命令和if errorlevel,這會使我認爲會帶來更好的用戶體驗。

第三,在測試用戶輸入時,您應該在if語句中使用/i開關以區分大小寫。但是,如果使用choice/if errorlevel,這不相關。

第四,Windows路徑使用反斜槓,而不是正斜槓。

我想解決這樣說:

@echo off 
setlocal 

:join 
cls 
if errorlevel 1 set /P "=Retrying... "<NUL 
if not exist "C:\Users\Public\room.cmd" (
    echo No room has been found. 
    echo. 
    choice /c yn /n /m "Do you want to retry? [y/n] " 
    if errorlevel 2 goto home 
    goto join 
) else (
    "C:\Users\Public\room.cmd" 
    echo A room has been found. 
    pause >nul 
    echo Joining 
    set roomjoined=1 
) 

:home 
echo this finally works 
pause