2012-11-25 117 views
1

我正在運行一個批處理文件,提示用戶輸入名稱。如果用戶輸入任何和按下回車,然後我要一遍又一遍地顯示相同的窗口,上面寫着:忽略空或輸入批

Enter Name: 

下面的代碼是不工作:

@echo off 
:myDosFunc 
set /p name=Enter Name: 
IF "%name%"=="" (
call:myDosFunc 
) ELSE (
echo %path% 
) 
pause 
GOTO:EOF 

call:myDosFunc 

我是新來的一批, 請幫忙。

回答

1

我想這是你所追求的:

@ECHO OFF 
:start 
SET /P uname=Please enter your name: 
IF "%uname%"=="" GOTO Error 
ECHO Hello %uname%, Welcome to DOS inputs! 
GOTO End 
:Error 
goto start 
:End 

使用GOTO關鍵字。去這裏的更多信息:http://www.codeproject.com/Tips/123810/Get-user-input-from-DOS-prompt

+1

更多信息(包括代碼)可以在本網站上找到:http://www.codeproject.com/Tips/123810/Get-user-input-from-DOS-提示 – w0051977

+0

嗨w0051977,請輸入你的名字:應該顯示一次的任何時間進入按下。它不應該被提示下面的輸入按下,反覆。希望你得到我...謝謝 – par181

+0

@pkawar,如果我是理解你是否正確,我相信如果用戶在沒有指定名稱的情況下按下輸入,你不想要發生任何事情? – w0051977

1

的問題是,您要顯示路徑,而不使用雙引號括起來,而路徑可以包含抵觸的運營商如)那麼batfile由錯誤關閉。

PS:我已經在代碼中做了其他小的更正。

@echo off 

:myDosFunc 
Set "NAME=" 
set /p "name=Enter Name:" 

IF NOT DEFINED NAME (
    call :myDosFunc 
) ELSE (
    echo "%path%" 
) 
pause 
GOTO:EOF 
+0

回聲PATH可能會失敗,不帶引號或帶或不帶。這取決於PATH的內容。在我工作的大多數機器上,它的工作原理沒有引號。唯一有保證的方法是使用延遲擴展。 – dbenham

+0

我可以向你保證PATH不能失敗使用引號,不能失敗,因爲你不能在創建文件夾名稱時使用有衝突的字符(只有(和)),所以如果你在我的回答中包含路徑,任何字符都是衝突的。 – ElektroStudios

+0

不正確。 PATH中的一些路徑可能已被引用,其他路徑不可引用。以下有效的PATH定義不能用引號或不用引號安全地擴展:'PATH =「c:\ part1&part2」; c:\ this&that'。有關更多信息,請參見[如何檢查%PATH%中是否存在目錄?](http://stackoverflow.com/a/8046515/1012053)。特別是,看看第7點。 – dbenham

2

這與w0051977的答案類似,但我相信它更貼近您的原意。

@echo off 
set "name=" 
:myDosFunc 
set /p "name=Enter Name: " 
if not defined name goto :myDosFunc 
echo %path% 
pause 
exit /b 

如果你只是想提示出現一次,無論用戶按了多少次輸入不輸入任何東西,那麼你可以使用:

@echo off 
set "name=" 
<nul set /p "=Enter Name: " 
:myDosFunc 
set /p "name=" 
if not defined name goto :myDosFunc 
echo %path% 
pause 
exit /b 
0

簡單的解決辦法是添加cls在提示輸入之前

:myDosFunc 
cls 
set /p name=Enter Name: