批处理文件 - IF 语句问题

时间:2021-03-26 19:19:52

标签: if-statement batch-file

我所有的 StackOverflow 成员你好!我正在尝试设置一个有点基本的脚本,以帮助在面向域的 Corp 环境中检查域控制器上的用户帐户详细信息。一位 IT 服务经理设置了一个非常淡化的脚本,基本上只运行以下命令:

网络用户/域

我尝试构建一个更好的脚本,因为我们在很多客户环境中都使用了它,它减少了猜测工作和总体时间。问题是在脚本的末尾,我设置了一个带有 ay/n 提示的直接返回到脚本的顶部。脚本终止。我在设置一个基本的错误处理例程方面非常失败,该例程说明报告的值既不是 y 也不是 n,回显一个简单的错误字符串,然后重复提示。以下是我的设置代码(我已经删除了之前为 y/n 值设置循环例程的尝试。我已经更改了每个 GOTO 部分的实际路径的值,以免共享面向客户的信息。

@ECHO OFF

:Start
SET uname=
cls

IF "%userdomain%"=="D1" GOTO 1
IF "%userdomain%"=="D2" GOTO 2
IF "%userdomain%"=="D3" GOTO 3
IF "%userdomain%"=="D4" GOTO 4

:1
ECHO You are on the D1 domain (%userdomain%)
ECHO Usernames should be in the format of firstname.lastname
ECHO.
SET /P uname=Username: 
IF "%uname%"=="" GOTO Error
net user %uname% /domain
GOTO Request

:2
ECHO You are on the D2 Domain (%userdomain%)
ECHO Username format varies based on the creation of the ID.
ECHO.
SET /P uname=Username: 
IF "%uname%"=="" GOTO Error
net user %uname% /domain
GOTO Request

:3
ECHO You are on the D3 Domain (%userdomain%)
ECHO Usernames are formatted as First Initial Last Name (auser)
ECHO.
SET /P uname=Username: 
IF "%uname%"=="" GOTO Error
net user %uname% /domain
GOTO Request

:4
ECHO You are on the D4 Domain (%userdomain%)
ECHO Usernames are formatted as First Initial Last Name (auser)
ECHO.
SET /P uname=Username: 
IF "%uname%"=="" GOTO Error
net user %uname% /domain
GOTO Request

:Error
ECHO.
ECHO Username was left blank, please enter a valid username and try again
ECHO.
TIMEOUT /T 5
GOTO Start

:Request
ECHO.
SET /P resp=Do you want to perform another lookup Y/N?
IF /I "%resp%"=="y" GOTO Start
IF /I "%resp%"=="n" exit

在上面的 :Request 部分中,我尝试使用 IF /I NOT 和 IF NOT /I 来开始语句,以及使用 true 面向 false 的值将变量设置为 true,然后使语句说 if not y if not n 将变量设置为 false,然后使用 if false,重复循环,到目前为止,按 y 或 n 以外的任何键都会退出提示。

感谢任何帮助,并提前致谢!

1 个答案:

答案 0 :(得分:0)

您使用了错误的命令,当只需要已知输入时,请改用 choice.exe 实用程序:

@ECHO OFF

:Start
CLS
ECHO You are on the D%USERDOMAIN:~-1% domain (%USERDOMAIN%)
ECHO Usernames should be in the format of firstname.lastname
ECHO(
SET "uname="
SET /P "uname=Username: "
IF NOT DEFINED uname GOTO Error
NET USER %uname% /DOMAIN
GOTO Request

:Error
ECHO(
ECHO Username was left blank, please enter a valid username and try again
ECHO(
TIMEOUT /T 5
GOTO Start

:Request
ECHO(
CHOICE /M "Do you want to perform another lookup"
IF NOT ERRORLEVEL 2 GOTO Start

关闭前带有消息的附加示例。

@ECHO OFF

:Start
CLS
ECHO You are on the D%USERDOMAIN:~-1% domain (%USERDOMAIN%)
ECHO Usernames should be in the format of firstname.lastname
ECHO(
SET "uname="
SET /P "uname=Username: "
IF NOT DEFINED uname GOTO Error
NET USER %uname% /DOMAIN
GOTO Request

:Error
ECHO(
ECHO Username was left blank, please enter a valid username and try again
ECHO(
TIMEOUT /T 5
GOTO Start

:Request
ECHO(
CHOICE /M "Do you want to perform another lookup"
IF NOT ERRORLEVEL 2 GOTO Start
ECHO(
ECHO Thank you and goodbye.
ECHO Press any key to exit. . .
TIMEOUT /T -1 >NUL