Batch file 如何从提示符验证DOS批处理用户输入

Batch file 如何从提示符验证DOS批处理用户输入,batch-file,windows-7,dos,Batch File,Windows 7,Dos,我正在尝试编写一个脚本,提示用户输入驱动器号,然后验证条目是否为单个字符,并且是否在有效范围内: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

我正在尝试编写一个脚本,提示用户输入驱动器号,然后验证条目是否为单个字符,并且是否在有效范围内: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是小写。
”如果您有任何想法或建议,我们将不胜感激

你为什么不试试这个:

@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

编辑:我这样做是为了将字符也转换成大写。

为什么不试试这个:

@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

编辑:我这样做是为了将字符也转换成大写。

为什么不试试这个:

@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

编辑:我这样做是为了将字符也转换成大写。

为什么不试试这个:

@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

编辑:我这样做是为了将字符也转换成大写。

这里有一个很好的替代方法。您可以使用
choice
命令强制输入有效响应,而不是让用户自由地捣乱,然后因其无礼而惩罚他。然后,为了避免出现一长串将选项转换回字母值的
if errorlevel
条件,有一个技巧使用一个特殊的环境变量将errorlevel转换为字母数字字符,
%=exitcodescii%

@echo关闭
setlocal
选项/c defghijklmnopqrstuvwxyz/n/m“此工作站上分配的网络驱动器号是多少?”
设置/a ascii=%ERRORLEVEL%+67
命令/c退出/b%ascii%
设置“字母=%=ExitCodeAscii%”
回显您选择的%letter%
不清楚您的目标是什么,您想要选择的驱动器号是驱动器映射的现有驱动器号还是未使用的驱动器号。根据您的意图,您可能会对以下一个或两个提示感兴趣*耸耸肩*

您可以使用
wmic
,以编程方式确定当前为WMI查询分配的驱动器号:

wmic logicaldisk获取设备ID/值|查找“=”
如果要创建网络驱动器映射,并希望允许Windows确定要自动分配的驱动器号,请使用
pushd

net use\\server/user:domain\username密码
pushd\\server\share
。。。然后,要删除映射,请执行以下操作:

popd
net使用\\服务器/删除

这里有一个骇人的替代方案。您可以使用
choice
命令强制输入有效响应,而不是让用户自由地捣乱,然后因其无礼而惩罚他。然后,为了避免出现一长串将选项转换回字母值的
if errorlevel
条件,有一个技巧使用一个特殊的环境变量将errorlevel转换为字母数字字符,
%=exitcodescii%

@echo关闭
setlocal
选项/c defghijklmnopqrstuvwxyz/n/m“此工作站上分配的网络驱动器号是多少?”
设置/a ascii=%ERRORLEVEL%+67
命令/c退出/b%ascii%
设置“字母=%=ExitCodeAscii%”
回显您选择的%letter%
不清楚您的目标是什么,您想要选择的驱动器号是驱动器映射的现有驱动器号还是未使用的驱动器号。根据您的意图,您可能会对以下一个或两个提示感兴趣*耸耸肩*

您可以使用
wmic
,以编程方式确定当前为WMI查询分配的驱动器号:

wmic logicaldisk获取设备ID/值|查找“=”
如果要创建网络驱动器映射,并希望允许Windows确定要自动分配的驱动器号,请使用
pushd

net use\\server/user:domain\username密码
pushd\\server\share
。。。然后,要删除映射,请执行以下操作:

popd
net使用\\服务器/删除

这里有一个骇人的替代方案。您可以使用
choice
命令强制输入有效响应,而不是让用户自由地捣乱,然后因其无礼而惩罚他。然后,为了避免出现一长串将选项转换回字母值的
if errorlevel
条件,有一个技巧使用一个特殊的环境变量将errorlevel转换为字母数字字符,
%=exitcodescii%

@echo关闭
setlocal
选项/c defghijklmnopqrstuvwxyz/n/m“此工作站上分配的网络驱动器号是多少?”
设置/a ascii=%ERRORLEVEL%+67
命令/c退出/b%ascii%
设置“字母=%=ExitCodeAscii%”
回显您选择的%letter%
不清楚您的目标是什么,您想要选择的驱动器号是驱动器映射的现有驱动器号还是未使用的驱动器号。根据您的意图,您可能会对以下一个或两个提示感兴趣*耸耸肩*

您可以使用
wmic
,以编程方式确定当前为WMI查询分配的驱动器号:

wmic logicaldisk获取设备ID/值|查找“=”
如果要创建网络驱动器映射,并希望允许Windows确定要自动分配的驱动器号,请使用
pushd

net use\\server/user:domain\username密码
pushd\\server\share
。。。然后,要删除映射,请执行以下操作:

popd
net使用\\服务器/删除

这里有一个骇人的替代方案。您可以使用
choice
命令强制输入有效响应,而不是让用户自由地捣乱,然后因其无礼而惩罚他。然后,为了避免出现一长串将选项转换回字母值的
if errorlevel
条件,有一个技巧使用一个特殊的环境变量将errorlevel转换为字母数字字符,
%=exitcodescii%

@echo关闭
setlocal
选项/c defghijklmnopqrstuvwxyz/n/m“此工作站上分配的网络驱动器号是多少?”
设置/a ascii=%ERRORLEVEL%+67
指令/