我正在尝试编写一个脚本,提示用户输入驱动器号,然后验证该条目是否为单个字符且属于有效范围:D-Z
这是我到目前为止所做的:
setlocal enableextensions enabledelayedexpansion
set MIN_DRIVE_LOWER=d
set MAX_DRIVE_LOWER=z
set /P RELEASE_DRIVE="What is the assigned network drive letter on this workstation? "
echo Release drive is %RELEASE_DRIVE%
if /I !RELEASE_DRIVE! GEQ %MIN_DRIVE_LOWER% (
if /I !RELEASE_DRIVE! LEQ %MAX_DRIVE_LOWER% (
echo Release drive is lower-case.
)
)
无论我在提示符下输入什么,我的脚本都会到达“echo Release drive is lower-case.
”任何想法或建议都会非常感激。
答案 0 :(得分:2)
这是一个讨厌的选择。您可以使用choice
命令强制输入有效的响应,而不是让用户自由搞砸然后惩罚他的傲慢。然后,为了避免将if errorlevel
条件的长列表转换回其alpha值,可以使用将ERRORLEVEL转换为字母数字字符%=ExitCodeAscii%
的特殊环境变量。 More details are here.
@echo off
setlocal
choice /c defghijklmnopqrstuvwxyz /n /m "What is the assigned network drive letter on this workstation? "
set /a ascii = %ERRORLEVEL% + 67
cmd /c exit /b %ascii%
set "letter=%=ExitCodeAscii%"
echo You chose %letter%
目前尚不清楚您的目标是什么,您要选择的驱动器号是现有字母还是未使用的驱动器映射字母。根据您的意图,您可能会对以下一个或两个提示感兴趣。 *耸肩*
您可以使用wmic
以编程方式确定当前使用WMI查询分配的驱动器号:
wmic logicaldisk get deviceid /value | find "="
如果要创建网络驱动器映射并希望允许Windows确定要自动分配的驱动器号,请使用pushd
。
net use \\server /user:domain\username password
pushd \\server\share
...然后删除映射:
popd
net use \\server /delete
答案 1 :(得分:1)
你为什么不试试这个:
@echo off
setlocal enableextensions enabledelayedexpansion
set /P rd="What is the assigned network drive letter on this workstation? "
echo Release drive is %rd%
:: Variable valid will be either 0 or 1
set valid=0
for %%a in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if /i "%rd%"=="%%a" (
set valid=1
if "%rd%" neq "%%a" set rd=%%a
)
)
Echo.
if "%valid%"=="1" (
Echo Valid Input Detected: %rd%
) else (
Echo Invalid Input: %rd%
)
pause
编辑:我这样做是为了将字符转换为大写字母。