标题: [其他] 两次choice,第2次无法正常获取errorlevel的值? [打印本页]
作者: wkl17 时间: 2020-2-16 23:01 标题: 两次choice,第2次无法正常获取errorlevel的值?
不知道是否bug,我在同一个bat里面,
用到2次choice选择,
但第2次的errorlevel获取的值始终有问题。
Win10 Pro 1507。
例如:- @echo off
- :Start
- echo.
- choice /c 1234569 /M 请输入数字:
- echo.
- if errorlevel 9 set Number1=9 & goto Next
- if errorlevel 8 set Number1=8 & goto Next
- if errorlevel 7 set Number1=7 & goto Next
- if errorlevel 6 set Number1=6 & goto Next
- if errorlevel 5 set Number1=5 & goto Next
- if errorlevel 4 set Number1=4 & goto Next
- if errorlevel 3 set Number1=3 & goto Next
- if errorlevel 2 set Number1=2 & goto Next
- if errorlevel 1 set Number1=1 & goto Next
-
- :Next
- choice /c 1234569 /M 请输入数字2:
- if errorlevel 9 set Number2=99 & goto Next2
- if errorlevel 8 set Number2=88 & goto Next2
- if errorlevel 7 set Number2=77 & goto Next2
- if errorlevel 6 set Number2=66 & goto Next2
- if errorlevel 5 set Number2=55 & goto Next2
- if errorlevel 4 set Number2=44 & goto Next2
- if errorlevel 3 set Number2=33 & goto Next2
- if errorlevel 2 set Number2=22 & goto Next2
- if errorlevel 1 set Number2=11 & goto Next2
-
- :Next2
-
- echo Number1是:%Number1%
- echo.
- echo Number2是:%Number2%
- echo =========================
- goto Start
复制代码
请看我截图的测试。第2次的choice输入9后,本来应该显示99的,但却显示77
作者: wkl17 时间: 2020-2-16 23:03
虽然我choice的 /c 设置的是 1234569 ,但if errorlevel 必须从987654321这样倒序下来。如果使用9654321的话,会导致判断出错。我也不知道为什么。
但现在因为我需要的情况比较特殊, /c的值不能有7和8(举例。实际上有时只有1239这4个。)
作者: zaqmlp 时间: 2020-2-16 23:40
choice按位置而不是字符
作者: red2020 时间: 2020-2-17 00:20
本帖最后由 red2020 于 2020-2-17 00:23 编辑
- @echo off
- :Start
- echo.
-
- choice /c 1234569 /M 请输入数字:
- set/a "Number1=((%errorlevel%+1)>>3)*2+%errorlevel%"
-
- choice /c 1234569 /M 请输入数字2:
- set/a "Number2=(((%errorlevel%+1)>>3)*2+%errorlevel%)*11"
-
- echo;Number1是:%Number1%
- echo;Number2是:%Number2%
-
- echo =========================
- goto Start
复制代码
作者: wkl17 时间: 2020-2-17 17:03
choice按位置而不是字符
zaqmlp 发表于 2020-2-16 23:40
原来如此,感谢解答!不知道 choice的选项,能否数字+字母组合?例如 /c 123456789AaBb (假设要用到这些)。假设可以,不知道 顺序上要怎么列?字母是不是比数字要放在更前面?
(只是提出这样一个问题。我自己将会进行测试检验。)
作者: wkl17 时间: 2020-2-17 17:05
red2020 发表于 2020-2-17 00:20
感谢解答,一个很酷的思路,学习了。
作者: dos-a 时间: 2023-2-13 20:12
你或许可以看看这个?里面也有不同得用法
@echo off
:1
cls
call :devices
call :de
:de
set devices=
set cat=
set cat_n=
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1 delims= " %%i in ('adb devices') do (
set devices=!devices! %%i
set /a cat+=1
)
for /l %%i in (1,1,%cat%) do set cat_n=!cat_n!%%i
@REM set cat_n=%cat_n%0
@REM choice /c %cat_n% /n /m 请输入" [ ] "内数字序号,按" 0 "退出当前操作:
@REM set /a e=%cat%+1
@REM if "%ERRORLEVEL%"=="%e%" call :1
set cat_n=%cat_n%ye
choice /c %cat_n% /n /m 请输入" [ ] "内数字序号,按" y "刷新设备列表,按" e "退出当前操作:
set /a y=%cat%+1
set /a e=%cat%+2
if "%ERRORLEVEL%"=="%y%" call :1
if "%ERRORLEVEL%"=="%e%" exit
for /f "tokens=%ERRORLEVEL%" %%b in ("!devices!") do set devices=%%b
pause
for /f "delims=" %%r in ('adb -s !devices! shell getprop ro.product.model') do set model=%%r
echo model=!model!
pause
call :1
:devices
setlocal enabledelayedexpansion
rem 输出所有设备标识
echo ╔═ ═╗
echo 已连接设备
echo ╔════════════════════════════════ ╚═ ═╝ ═════════════════════════════╗
echo,
set "cnt=0"
for /f "skip=1 tokens=1 delims= " %%a in ('adb devices') do (
REM 获取设备model号
for /f "delims=" %%r in ('adb -s %%a shell getprop ro.product.model') do (
for /f "delims=" %%x in ("%%r") do (
set "f=%%x"
)
)
set "cv="
for /f "delims=" %%c in ('adb -s %%a shell getprop hw_sc.build.platform.version') do (
for /f "delims=" %%x in ("%%c") do (
set "cv=%%x"
)
)
if "!cv!"=="" (
REM 安卓
for /f "delims=" %%s in ('adb -s %%a shell getprop ro.build.version.release') do (
for /f "delims=" %%x in ("%%s") do (
set "sv=%%x"
)
)
set "version=!sv!"
set "system=andorid"
) else (
REM 鸿蒙
set "version=!cv!"
set "system=鸿蒙"
)
set /a cnt+=1
echo [!cnt!] 系统版本: !system! !version! model: !f! 序列号: %%a
echo,
)
echo ╚══════════════════════════════════════════════════════════════════════════════════╝
echo.
goto :eof
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |