我有一个需要用户输入的批处理脚本。但是,我只想允许a-z, 0-9, @#$].~+-=_/\:;
。有没有办法使用 findstr 来确保除了这些字符之外没有其他字符?我查看了文档,但找不到办法做到这一点。
我拥有的:
@echo off
echo Enter Username:
set /p usr=">"
答案1
使用 findstr 默认正则表达式模式并使用带有反斜杠的具有特殊含义的 [characterclass] 转义字符。
:: Q:\Test\2018\12\07\SU_1381655.cmd
@Echo off
:loop
set /p "input=Enter data(a-z, 0-9, @#$].~+-=_/\:;.:)"
Echo:%input%|findstr /I "^[a-z0-9@#$\]\.~+\-=_\/\\:;]*$" >NUL 2>&1 && (
echo checked input ok
) || (
echo invalid input
)
goto :loop
请检查一下我是否输入了正确的所有字符。
如果只需要小写字母,请删除 /i 开关。
由于可能的poisenous
字符<|>&
不带引号而被回显,因此它们可能会破坏批次。