2016-05-15 77 views
-2

我正在嘗試創建一個簡單的程序,在您輸入名稱後顯示您的姓名。爲什麼不能使用這個批處理文件?

花了幾個小時試圖讓這個批處理文件在Windows 10和Windows 7的計算機上工作後,我仍然不知道是什麼問題。在你輸入你的答案後,無論你是否確認這是你的名字,它仍然不起作用。

我試圖通過把pause幾乎無處不在,它仍然不工作。

有人請指出有什麼不對嗎?謝謝。

這裏是我的代碼:

ECHO OFF 
setlocal 

COLOR A 
cls 
:getName 
ECHO test 
echo Please input name. 
set "name=" 
SET /P NAME= 
if not defined NAME goto getName 
ECHO %NAME%, is this correct? Y/N 
set /p 097= 
if %O97%==Y goto :begin 
set favvid=0 
set hack=0 
:b 
echo Input name 
set name= 
set /P name= 
echo %name%, correct? Y/N 
set 897= 
set /p 897= 
if %897%==N goto :c 
if %897%==Y goto :begin 
:c 
echo Input name 
set name= 
set /P name= 
echo %name%, correct? Y/N 
set 897= 
set /p 897= 
if %897%==N goto b 
if %897%==Y goto begin 
echo Name = %NAME% Is now your name. Too many attempts 
:begin 
echo Hello %Name% 
pause 

回答

1

if行上的兩個錯誤:

  1. 您不應該使用數字來啓動批處理文件中的變量,因爲它們被解釋爲傳遞給批處理文件的參數。 %0是批處理文件本身。 %1是第一次,%8是第8參數等。(你可以嘗試echo --%0--%1--%097%--在批處理文件中看到什麼導致它給你。)

    if "%097%"=="Y" goto begin

    使用此if "%Answer%"=="Y" goto begin

代替

現在還注意到,雖然你的線set /p 097=097當你 測試它在下一行與%O97%你d o沒有0但是 您有信O。這會使您的測試每次都失敗。

  • 你需要把字符串中的引號,像這樣:

    if "%Answer%"=="Y" goto begin

  • 最後需要指出的測試是區分大小寫的。所以當用戶按下時,它將被解釋爲錯誤的答案。你需要一個/I添加到您的測試:

    if/I"%Answer%"=="Y" goto begin

  • 還有一點。在goto之後,你把冒號放在一些地方,有些地方不是,它是兼容的,但保持它的一致性更好。

    +1

    'goto begin'和'goto:begin'是一樣的,冒號是兼性的。我一直使用冒號;它有助於找到標籤和相應的GOTO,例如... – JosefZ

    +0

    感謝您的支持。監督(我與其他錯誤一起改變,所以我認爲兩者都影響結果)。我糾正了這一點。 – ib11

    相關問題