无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3110|回复: 19
打印 上一主题 下一主题

[求助] 批处理变量不执行,是什么原因

[复制链接]
跳转到指定楼层
1#
发表于 2022-11-20 19:10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有段代码,动态的变量,可以赋值执行,但自动获取的变量,不能赋值执行,是什么原因,特此向各位大侠请教!!
代码如下:
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%  这个变量,不能赋值写进去,如果是手动输入,就可以写进去。
请问各大侠,要怎样改,才能将这个值写入。谢谢

2#
发表于 2022-11-20 19:24:12 | 只看该作者
for %%i in (A B C D E F) do call set stbid=%%^stbid:%%i=%%i%%
原语句换成上面的。

点评

替换了,还是没有将数据写进去  发表于 2022-11-20 19:45
回复

使用道具 举报

3#
发表于 2022-11-20 19:59:18 来自手机 | 只看该作者
没看见运行结果的截图

点评

机器串码:0350330220029570400174CFOOEEBB98 MAC地址:58:68:7A:6D:61:63  详情 回复 发表于 2022-11-20 20:29
数据写进盒子,然后重启,再看里面的数据,还是原来的。  发表于 2022-11-20 20:19
回复

使用道具 举报

4#
发表于 2022-11-20 20:01:56 | 只看该作者
那你这个语句想干什么?

点评

这句,是没什么用的。  发表于 2022-11-20 20:09
回复

使用道具 举报

5#
发表于 2022-11-20 20:18:58 | 只看该作者
本帖最后由 2010techon 于 2022-11-20 20:23 编辑

后面加pause 暂停看看

点评

看到那个变量显示是 ”74:CF:00:EE:BB:98 ” 在98的后面,多了个空格  详情 回复 发表于 2022-11-20 20:50
回复

使用道具 举报

6#
发表于 2022-11-20 20:26:32 | 只看该作者
搞不懂,没用为什么不注释或者删除,看看别人的方法吧!

点评

其实那句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。  详情 回复 发表于 2022-11-21 16:23
回复

使用道具 举报

7#
 楼主| 发表于 2022-11-20 20:29:03 | 只看该作者
本帖最后由 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
回复

使用道具 举报

8#
 楼主| 发表于 2022-11-20 20:50:21 | 只看该作者
本帖最后由 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%


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

回复

使用道具 举报

9#
发表于 2022-11-20 22:47:40 | 只看该作者
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!
复制代码

点评

这句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。  详情 回复 发表于 2022-11-21 16:25
回复

使用道具 举报

10#
发表于 2022-11-21 06:34:24 来自手机 | 只看该作者
会截屏就客易搞定
回复

使用道具 举报

11#
发表于 2022-11-21 08:39:36 | 只看该作者
我感觉是没打开setlocal EnableDelayedExpansion
回复

使用道具 举报

12#
发表于 2022-11-21 10:47:26 | 只看该作者
本帖最后由 2010hook 于 2022-11-21 10:50 编辑

call set 适用于解析(预处理)一些路径变量,不能滥用
回复

使用道具 举报

13#
 楼主| 发表于 2022-11-21 16:23:59 | 只看该作者
conlin888 发表于 2022-11-20 20:26
搞不懂,没用为什么不注释或者删除,看看别人的方法吧!

其实那句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。
回复

使用道具 举报

14#
 楼主| 发表于 2022-11-21 16:25:00 | 只看该作者
nttwqz 发表于 2022-11-20 22:47
我感觉,前面执行成功后面会跳转,你这段代码中没有这个标签,是不是可以理解标签:inputerr1在后面,这样 ...

这句话,是判断输入的那字符串里,是否包含了除ABCDEF外的字母,如果有,变跳转到提示输入有误的提示。
回复

使用道具 举报

15#
发表于 2022-11-21 20:59:52 | 只看该作者
for %%i in (A B C D E F) do call set stbid=%%stbid:%%i=%%i%%

百分号 不能那样嵌套吧。
回复

使用道具 举报

16#
发表于 2023-12-1 20:58:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

17#
发表于 2023-12-4 19:53:59 | 只看该作者
进来学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 00:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表