我需要一些帮助,如何通过set / p循环未设置或未输入的变量。我的下面的代码是部分工作的,除非所有的set / p变量全部输入它将运行无限循环的部分,我认为这是因为在标签内调用标签
这就是我想要你曾要求的名字和姓氏:
Enter First Name:
Enter Last Name: Bill
Enter 1 to Continue: 1
现在当它被处理并且批处理检测到第一个名称被清空时,它将返回并仅提示那些空的或尚未设置的变量。
@echo off
SetLocal EnableDelayedExpansion
set name=
set age=
set gender=
set pick= "enter 1 to register: "
if %pick% EQU 1 goto getch
:getch
cls
if not defined name (set /p name= "Enter name: ") else ( echo Name: !name!)
if not defined age (set /p age= "Enter age: ") else (echo Age: !age!)
if not defined gender (set /p gender= "Enter gender: ") else (echo Gender: !gender!)
goto getch
pause
答案 0 :(得分:1)
在第二部分中,您不需要设置已经设置的VAR
@echo off
set name=
set age=
set gender=
:getch
cls
if not defined name (set /p name= "Enter name: ")
if not defined age (set /p age= "Enter age: ")
if not defined gender (set /p gender= "Enter gender: ")
pause
确保真正设置所有VAR
:
@echo off
set name=
set age=
set gender=
:getch
cls
if not defined name (set /p name= "Enter name: ")
if not defined name goto:getch
if not defined age (set /p age= "Enter age: ")
if not defined age goto:getch
if not defined gender (set /p gender= "Enter gender: ")
if not defined gender goto:getch
pause
答案 1 :(得分:0)
if not defined gender (set /p gender= "Enter gender: ") else (echo Gender: !gender!)
IF DEFINED NAME IF DEFINED AGE IF DEFINED GENDER GOTO ALLDONE
goto getch
:ALLDONE
echo all done
输入每个变量后,原始代码将在循环中执行cls/echo
,因为无法退出循环。
另一种更简单的方法是替换
goto getch
与
for %%a in (name age gender) do if not defined %%a goto getch
第三种方式是:
if not defined name (set /p name= "Enter name: "&GOTO GETCH) else ( echo Name: %name%)
(并重复其他两个变量) - 然后删除最终的goto getch
。这样做的目的是显示输入已的每个值,并提示输入 not 的任何值。当用户响应时,代码然后重新执行cls
并显示条目,停止任何空值。请注意,&
可用于连接一系列命令。
BTW - !var!
中不需要echo
因为您没有更改代码块中变量的值。
此外,
if "%pick%" EQU "1" goto getch
将提供一些防止意外用户输入的保护。