cmd - 如何通过具有多个用户输入的 batch file 多次提示用户?

我想更改大约 250 台服务器的序列号和产品编号(目前它们不正确)。我知道我需要使用的命令,但我需要能够在该命令中输入某些选项然后运行它。

我需要的选项是:

  1. 选择更新序列号或产品号的提示
  2. 序列号更新前已选择实际序列号、IP地址、用户名和密码多次提示
  3. 产品编号更新前已选择多次提示实际产品编号、IP地址、用户名和密码

我希望通过 batch file 运行的命令是:

asu64 set SYSTEM_PROD_DATA.SysInfoSerialNum XXXXXXX --host XXX.XXX.XXX.XXX --user XXXX --password XXXX

XXX 是用户定义的输入。我也想完成,然后返回初始选择菜单。

这是我到目前为止所做的。 (请原谅它的简单性。我对这些东西很陌生。)

@ECHO OFF
ECHO Test Code
ECHO.
ECHO 1.Serial Number
ECHO 2.Product Name
ECHO.
CHOICE /C 12 /M "Enter your choice:"
ECHO.
IF CHOICE 1 GOTO SerialNumber
IF CHOICE 2 GOTO ProductName

:SerialNumber
ECHO Serial Number 
GOTO End

:ProductNumber
ECHO Product Number
GOTO End

PAUSE

非常感谢您提供的任何帮助。

回答1

可以用于此任务:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "IpAddress="
set "NameUser="
set "Password="

:MainMenu
cls
echo/
echo   1 ... Serial number
echo   2 ... Product number
echo   E ... Exit
echo/
%SystemRoot%\System32\choice.exe /C 12E /N /M "Enter your choice:"
if errorlevel 3 exit /B
if not errorlevel 1 goto MainMenu
echo/
if errorlevel 2 goto ProductNumber

set "NumberText=serial"
set "NumberOption=SYSTEM_PROD_DATA.SysInfoSerialNum"
goto NumberPrompt

:ProductNumber
set "NumberText=product"
set "NumberOption=SYSTEM_PROD_DATA.SysInfoProductNum"

:NumberPrompt
set "NumberValue="
set /P "NumberValue=Please enter %NumberText% number: " || goto NumberPrompt
set "NumberValue=%NumberValue:"=%"
if not defined NumberValue goto NumberPrompt

echo/
if defined IpAddress (set "Default= [%IpAddress%]") else set "Default="
:IpPrompt
set /P "IpAddress=Please enter IP address%Default%: "
if not defined IpAddress goto IpPrompt
set "IpAddress=%IpAddress:"=%"
if not defined IpAddress goto IpPrompt

echo/
if defined NameUser (set "Default= [%NameUser%]") else set "Default="
:NamePrompt
set /P "NameUser=Please enter user name%Default%: "
if not defined NameUser goto NamePrompt
set "NameUser=%NameUser:"=%"
if not defined NameUser goto NamePrompt

echo/
if defined Password (set "Default= [%Password%]") else set "Default="
:PasswordPrompt
set /P "Password=Please enter password%Default%: "
if not defined Password goto PasswordPrompt
set "Password=%Password:"=%"
if not defined Password goto PasswordPrompt

echo/
"%~dp0ASU64.exe" set %NumberOption% "%NumberValue%" --host "%IpAddress%" --user "%NameUser%" --password "%Password%"
echo/
if not errorlevel 1 (
       echo The update of the %NumberText% number "%NumberValue%" was successful.
) else echo ERROR: The update of the %NumberText% number "%NumberValue%" failed!
echo/
%SystemRoot%\System32\choice.exe /C CE /N /T 10 /D C /M "Press C to continue or E to exit ..."
if not errorlevel 2 goto MainMenu
endlocal

可执行文件 ASU64.exe 使用 batch file 的完整路径引用,这意味着可执行文件必须始终与 batch file 位于同一目录中。在这种情况下,处理 batch file 的 cmd.exe 的当前目录无关紧要。

请阅读以下答案以获取代码说明:

要了解所使用的命令及其工作原理,请打开 https://www.howtogeek.com/235101/ 窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。

  • call /? ... 解释 %~dp0 ... 参数 0 的驱动器和路径,即 batch file 路径。
  • choice /?
  • echo /?
  • endlocal /?
  • exit /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?

相似文章

spring-batch - 无法并行运行 Spring 批处理步骤

我正在尝试并行运行多个步骤,但是当不同的流程尝试更新JOB_EXECUTION统计信息时,后端SQLServer数据库中出现错误(冲突)。我正在使用异步任务执行器,但除此之外,我不确定如何让这些流程成...

python - 在嵌套字典中组合重复项

目标我正在尝试将嵌套字典中的重复字典组合在一起以获得大量字典(〜10,000)。对于我的具体情况,我主要希望将标识符(例如USERID)的所有相关信息(例如批次和项目)都放在一个字典中,该字典位于包含...

随机推荐

最新文章