无忧启动论坛

标题: 批处理变量不执行,是什么原因 [打印本页]

作者: cxincn    时间: 2022-11-20 19:10
标题: 批处理变量不执行,是什么原因
有段代码,动态的变量,可以赋值执行,但自动获取的变量,不能赋值执行,是什么原因,特此向各位大侠请教!!
代码如下:
echo.
echo.下方输入要改的新STBID
echo.
echo.不分大小写,共32位
echo.
echo.  --------------------------------
echo.
echo.请输入 STBID
set stbid=&set /p stbid=:
echo.
echo.%stbid%|findstr /i /v "^[0-9,a-f]*$" >nul&&goto inputerr1
for %%i in (A B C D E F) do call set stbid=%%stbid:%%i=%%i%%
set hzmac=%stbid:~20,2%:%stbid:~22,2%:%stbid:~24,2%:%stbid:~26,2%:%stbid:~28,2%:%stbid:~30,2%
cls
echo.
echo.要写入的MAC为:
echo.%hzmac%
echo.
echo.
echo.要写入的STBID为:
echo.%stbid%
echo.
adb shell "echo 1 > /sys/class/unifykeys/attach"
adb shell "echo "mac"> /sys/class/unifykeys/name"
adb shell "cat /sys/class/unifykeys/name" >nul
adb shell "echo "%hzmac%"> /sys/class/unifykeys/write"

rem echo.烧写USID >nul

"%hzmac%  这个变量,不能赋值写进去,如果是手动输入,就可以写进去。
请问各大侠,要怎样改,才能将这个值写入。谢谢


作者: conlin888    时间: 2022-11-20 19:24
for %%i in (A B C D E F) do call set stbid=%%^stbid:%%i=%%i%%
原语句换成上面的。

作者: szwp    时间: 2022-11-20 19:59
没看见运行结果的截图
作者: conlin888    时间: 2022-11-20 20:01
那你这个语句想干什么?
作者: 2010techon    时间: 2022-11-20 20:18
本帖最后由 2010techon 于 2022-11-20 20:23 编辑

后面加pause 暂停看看
作者: conlin888    时间: 2022-11-20 20:26
搞不懂,没用为什么不注释或者删除,看看别人的方法吧!
作者: cxincn    时间: 2022-11-20 20:29
本帖最后由 cxincn 于 2022-11-20 20:31 编辑
szwp 发表于 2022-11-20 19:59
没看见运行结果的截图

机器串码:0350330220029570400174CF00EEBB98
MAC地址:58:68:7A:6D:61:63这就是运行后,没有改写MAC

正确的应该是  :

机器串码:0350330220029570400174CF00EEBB98
MAC地址:74:CF:00:EE:BB:98

作者: cxincn    时间: 2022-11-20 20:50
本帖最后由 cxincn 于 2022-11-20 21:13 编辑
2010techon 发表于 2022-11-20 20:18
后面加pause 暂停看看

看到那个变量显示是 ”74:CF:00:EE:BB:98 ”



原来是这句的后面多了个空格
set hzmac=%stbid:~20,2%:%stbid:~22,2%:%stbid:~24,2%:%stbid:~26,2%:%stbid:~28,2%:%stbid:~30,2%


终于可以了,谢谢你的提示。非常感谢


作者: nttwqz    时间: 2022-11-20 22:47
echo.%stbid%|findstr /i /v "^[0-9,a-f]*$" >nul&&goto inputerr1

我感觉,前面执行成功后面会跳转,你这段代码中没有这个标签,是不是可以理解标签:inputerr1在后面,这样中间这段代码将失去所用,其中的hzmac自然也就不能赋值成功,当然这也能是个错误检测。

for %%i in (A B C D E F) do call set stbid=%%stbid:%%i=%%i%%

在for中使用call将严重影响执行效率,多的话会十分明显,虽然你这很少,但仍然不建议这么用。
变量嵌套,个人不推荐使用一堆call+一堆%的方式,不易读且易出错。下面这种更简单易读,需要启用变量延迟。
  1. for %%i in (A B C D E F) do set stbid=!stbid:%%i=%%i!
复制代码

作者: szwp    时间: 2022-11-21 06:34
会截屏就客易搞定
作者: Climbing    时间: 2022-11-21 08:39
我感觉是没打开setlocal EnableDelayedExpansion
作者: 2010hook    时间: 2022-11-21 10:47
本帖最后由 2010hook 于 2022-11-21 10:50 编辑

call set 适用于解析(预处理)一些路径变量,不能滥用
作者: cxincn    时间: 2022-11-21 16:23
conlin888 发表于 2022-11-20 20:26
搞不懂,没用为什么不注释或者删除,看看别人的方法吧!

其实那句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。
作者: cxincn    时间: 2022-11-21 16:25
nttwqz 发表于 2022-11-20 22:47
我感觉,前面执行成功后面会跳转,你这段代码中没有这个标签,是不是可以理解标签:inputerr1在后面,这样 ...

这句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。
作者: dos时代菜鸟    时间: 2022-11-21 20:59
for %%i in (A B C D E F) do call set stbid=%%stbid:%%i=%%i%%

百分号 不能那样嵌套吧。
作者: nowayer    时间: 2023-12-1 20:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: yyz2191958    时间: 2023-12-4 19:53
进来学习




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3