首页 > 解决方案 > 在脚本 .bat 中阻止字符输入

问题描述

我有下面的脚本,只想输入数字,但如果用户输入特殊字符,系统不会进行正确处理(例如:“,@,!)

关于如何仅阻止和接受数字的任何想法?

@echo off
cls
:menu
cls

color 80

date /t
time /t
echo.

echo Computador: %computername%        Usuario logado: %username%
echo.           
echo IMPORTANTE: EXECUTAR ESSE SCRIPT SOMENTE NESTE SERVIDOR
echo.
echo  ==================================
echo * 1. TROCAR SENHAS DOS SERVERS     *
echo * 2. DETALHES SOBRE O HARDWARE     *
echo * 3. DETALHES SOBRE OS DISCOS      *
echo * 4. SAIR                          * 
echo  ==================================
echo.

set /p opcao= ESCOLHA UMA DAS OPCOES: 
echo ------------------------------
echo ------------------------------
if %opcao% equ 1 goto opcao1
if %opcao% equ 2 goto opcao2
if %opcao% equ 3 goto opcao3
if %opcao% equ 4 goto opcao4
if %opcao% GEQ 5 goto opcao5

标签: windowsbatch-file

解决方案


根据我的评论,您应该使用Choice命令而不是Set /P

@Echo Off

:Menu
ClS
Color 80
Date /T
Time /T
Echo(
Echo Computador: %ComputerName%        Usuario logado: %UserName%
Echo(           
Echo IMPORTANTE: EXECUTAR ESSE SCRIPT SOMENTE NESTE SERVIDOR
Echo(
Echo  ==================================
Echo * 1. TROCAR SENHAS DOS SERVERS     *
Echo * 2. DETALHES SOBRE O HARDWARE     *
Echo * 3. DETALHES SOBRE OS DISCOS      *
Echo * 4. SAIR                          * 
Echo  ==================================
Echo(
"%__AppDir__%choice.exe" /C 1234 /N /M "ESCOLHA UMA DAS OPCOES:"
GoTo opcao%ErrorLevel% 2>NUL||GoTo opcao5

或者,启用延迟扩展后,您可以继续使用并使用匹配Set /P检查输入:Findstr.exe

@Echo Off
SetLocal EnableDelayedExpansion

:Menu
ClS
Color 80
Date /T
Time /T
Echo(
Echo Computador: %ComputerName%        Usuario logado: %UserName%
Echo(           
Echo IMPORTANTE: EXECUTAR ESSE SCRIPT SOMENTE NESTE SERVIDOR
Echo(
Echo  ==================================
Echo * 1. TROCAR SENHAS DOS SERVERS     *
Echo * 2. DETALHES SOBRE O HARDWARE     *
Echo * 3. DETALHES SOBRE OS DISCOS      *
Echo * 4. SAIR                          * 
Echo  ==================================
Echo(
Set /P "opcao= ESCOLHA UMA DAS OPCOES: "
Echo "!opcao:~1!"|"%__AppDir__%findstr.exe" "^\"[1-4]\"$">NUL&&(
    GoTo opcao!opcao:~1!)||GoTo opcao5

推荐阅读