1

我正在运行一个批处理文件,提示用户“输入名称”。如果用户没有输入任何内容并按下回车键,那么我想一遍又一遍地显示同一个窗口,上面写着:

Enter Name:

以下代码不起作用:

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

call:myDosFunc

我是批处理新手,请帮忙。

4

4 回答 4

2

这类似于 w0051977 答案,但我相信它更符合您的初衷。

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

如果您只希望提示出现一次,无论用户按 Enter 多少次而不输入任何内容,那么您可以使用:

@echo off
set "name="
<nul set /p "=Enter Name: "
:myDosFunc
set /p "name="
if not defined name goto :myDosFunc
echo %path%
pause
exit /b
于 2012-11-25T21:01:33.350 回答
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

于 2012-11-25T20:39:00.233 回答
1

问题是您试图显示 PATH 而不用双引号括起来,并且 PATH 可能包含冲突的运算符,例如)batfile 因错误而关闭。

PS:我在代码中做了其他小的更正。

@echo off

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

IF NOT DEFINED NAME (
    call :myDosFunc
) ELSE (
    echo "%path%"
)
pause
GOTO:EOF
于 2012-11-25T20:40:38.363 回答
0

一个简单的解决方案是cls在提示输入之前添加

:myDosFunc
cls
set /p name=Enter Name:
于 2012-11-26T09:04:09.483 回答