2013-12-10 35 views
0

我一直在編寫一個批處理文件來模擬某種遊戲,但是在進入和提交空間時或者根本沒有任何東西時,它總是崩潰(或者簡單地關閉)。我怎樣才能解決這個問題呢?例如:批處理文件在進入空間時總是崩潰

set /p option=Option: 

然後我會在:

Option: 

我需要輸入什麼,但在這種情況下,如果我打回車不輸入任何東西(或空間),將關閉本身。

===編輯===

完整的代碼在這裏:

@echo off 
cd Desktop 
md TestFolder 
goto main 

:main 
cls 
title Test 
echo. 
echo Enter your name below 
echo. 
set /p name=Name: 
if %name% == %name% set name=%name% & goto finish 

:finish 
echo. 
echo Thank you for entering your name. 
echo Press any key to close the window. 
pause >nul 
exit 

的問題將處於 「設置/ P NAME =」 當批提示您輸入您的姓名(下稱「名稱:「部分」),如果您在沒有輸入任何內容的情況下按Enter,它將關閉。

+1

我們該如何幫忙?你顯示一行永遠不會崩潰的代碼。看到失敗的代碼可能很有用 – jeb

+0

是的,這是代碼,事實上,與此相似的每個代碼都會崩潰。 – MegaRodeon

回答

1

也許這就是你以後的樣子。

IF NOT DEFINED name GOTO main檢查用戶是否按下Enter鍵而不鍵入任何內容,如果是,則返回:main標籤並再次提示用戶輸入名稱。

該行IF "%name%"==" " GOTO main檢查用戶是否剛剛輸入了1 space字符,如果是,則返回:main標籤也會再次提示用戶。

:main 
cls 
title Test 
echo. 
echo Enter your name below 
echo. 
set /p name=Name: 
IF NOT DEFINED name GOTO main 
IF "%name%"==" " GOTO main 

:finish 
echo. 
echo Thank you for entering your name. 
echo Press any key to close the window. 
pause >nul 
exit 
+0

謝謝,它工作完美,現在批次永遠不會關閉,非常感謝! – MegaRodeon

2

你給了我們幾乎沒有什麼可繼續,但我會做出一個有教養的猜測。如果通過雙擊文件(或快捷方式),桌面或Windows資源管理器來運行該文件,則當程序到達終點時,控制檯將自動關閉。終點可能是由於您的代碼邏輯,也可能是由於致命的語法錯誤。在你有機會閱讀任何打印的信息之前它將關閉。

解決方案是改變遊戲的運行方式,特別是在開發時。通過開始 - >所有程序 - >附件直接運行控制檯,然後選擇cmd.exe。使用CD導航到遊戲所在的文件夾,然後輸入批處理文件的名稱以運行它。現在,遊戲結束時控制檯將保持打開狀態,並且您將能夠看到所有消息並進行調試更加輕鬆。

+0

對不起。我現在加了完整的代碼,請看我的帖子:) – MegaRodeon

3

這是使故障線路:

if %name% == %name% set name=%name% & goto finish 

如果你只是打在set /p name=Name:進入,%名字%是空的。 所以線上方將執行如下:

if == set name= & goto finish 

當然,這不會有任何效果 爲了使語法正確,使用:

if "%name%" == "%name%" set name=%name% & goto finish 

好吧,這是語法部分。 但你想做什麼?如果a等於a,則令a = a?

+0

如果a等於a,那麼make a = a ?? 是的,你永遠無法確定。由於#define a b在C++中是可行的,所以你要仔細檢查:-) –

+0

請注意,'&'之前的'space'將被包含在'name'變量中。一種消除這種情況的方法是在'set'name =%name%''中使用引號,或者將&直接放在變量後面,如'set name =%name%&' – foxidrive

+0

謝謝大家的回答,我喜歡將此標記爲我的答案,但不幸的是,我們只允許標記一個。那麼我會投票答覆你的答案,因爲我標記爲答案的人回答了我主要想做的事情。謝謝你們! – MegaRodeon