批处理(Batch)与Oracle:选择操作后不显示输入值的方法求助
解决批处理选择操作时隐藏输入值的问题
嘿,我看了你的批处理代码,问题出在set /p input=这一行——它会把你输入的数字直接回显在屏幕上,这正是你不想看到的。下面给你两种靠谱的解决办法:
方法1:用choice命令(强烈推荐)
choice是Windows批处理里专门为这种单键选择场景设计的命令,按下对应数字就直接触发操作,不用回车,而且默认不会显示输入的内容。修改后的代码如下:
@ECHO OFF :start echo Select Action: echo 1 - Make Update echo 2 - Revert Changes :: 限定可选按键为1和2,不重复显示选项,自定义提示文本 choice /c 12 /n /m "请选择操作:" :: choice的errorlevel是从高到低判断的,所以先判断2再判断1 If errorlevel 2 goto :choose2 If errorlevel 1 goto :choose1 :choose1 echo Selected Option 1 echo ENTER PASSWORD FOR USER: SQLPLUS -S USER@SID @update.sql goto end :choose2 echo Selected Option 2 REM it's just example SQLPLUS -S USER@PASSWORD\SID @reupdate.sql goto end :end pause
这里给你拆解下choice的参数:
/c 12:指定只能按1或2这两个键/n:不自动显示选项列表(因为你已经自己用echo打出选项了,避免重复)/m "请选择操作:":显示自定义的提示文字,引导用户操作
这样用户按下1或2后,屏幕上只会看到你设置的提示,完全不会出现输入的数字,完美解决你的问题。
方法2:用set /p配合临时隐藏回显(不推荐,但供参考)
如果你非要坚持用set /p的话,可以通过临时生成一个关闭回显的小批处理来实现隐藏输入,不过步骤会繁琐一点:
@ECHO OFF :start echo Select Action: echo 1 - Make Update echo 2 - Revert Changes :: 临时生成一个关闭回显的批处理来接收输入 echo @echo off > "%temp%\hideinput.bat" echo set /p input= >> "%temp%\hideinput.bat" cmd /q /c "%temp%\hideinput.bat" del "%temp%\hideinput.bat" If %input%==1 goto :choose1 If %input%==2 goto :choose2 :choose1 echo Selected Option 1 echo ENTER PASSWORD FOR USER: SQLPLUS -S USER@SID @update.sql goto end :choose2 echo Selected Option 2 REM it's just example SQLPLUS -S USER@PASSWORD\SID @reupdate.sql goto end :end pause
不过这种方法不如choice稳定,比如可能会出现光标错位的情况,所以还是优先选第一种方案。
另外你提到还有两个问题没说完,我猜其中一个可能是密码输入的隐藏?毕竟你后面要输入SQL的密码,批处理本身没有原生隐藏密码输入的功能,不过可以借助PowerShell来实现,比如:
echo ENTER PASSWORD FOR USER: for /f "delims=" %%p in ('powershell -Command "$p=Read-Host -AsSecureString; [System.Net.NetworkCredential]::new('',$p).Password"') do set "db_password=%%p" :: 之后用%db_password%替换SQLPLUS命令里的密码部分 SQLPLUS -S USER/%db_password%@SID @update.sql
内容的提问来源于stack exchange,提问作者4est
相关产品推荐
相关产品推荐

