Board logo

标题: [系统相关] 批处理命令set 如何查看指定变量? [打印本页]

作者: verbs    时间: 2020-2-27 11:48     标题: 批处理命令set 如何查看指定变量?

如上图我想仅查看 test_1 变量,却显示了 test_1 和 test_10,请问没有办法只显示 test_1?

万分感谢。
作者: Batcher    时间: 2020-2-27 12:17

回复 1# verbs


set命令的特性决定了它无法像你希望的那样工作:
SET command invoked with just a variable name, no equal sign or value
will display the value of all variables whose prefix matches the name
given to the SET command.  For example:
    SET P
would display all variables that begin with the letter 'P'


有什么特别的原因必须要用set而不能用echo吗:
  1. echo %test_1%
复制代码

作者: verbs    时间: 2020-2-27 12:44

本帖最后由 verbs 于 2020-2-27 13:32 编辑

感谢大神指点,
我希望根据变量名不同,取到不是的变量值,所以不无法直接使用 echo

测试脚本如下:
  1. @echo off
  2. set index=1
  3. :loop_get_value
  4. set test=test_%index%
  5. set | findstr /i /b "\<%test%\>">nul || goto parameters_error
  6. for /f "usebackq delims== tokens=2" %%i in (`set %test%`) do (
  7. echo %%i
  8. )
  9. set /a index+=1
  10. goto loop_get_value
  11. :parameters_error
  12. echo 参数不存在
  13. pause
  14. goto lable_exit
  15. :lable_exit
复制代码
有没有其它办法,可以实现类似效果,感谢指点
作者: Batcher    时间: 2020-2-27 13:05

回复 3# verbs


不知道这个代码是想表达什么意图
但是执行到第5行的时候肯定会 goto parameters_error
第6行永远不会被执行到
作者: verbs    时间: 2020-2-27 13:31

回复 4# Batcher


是的这段代码没有实际意义,主是要实现取的变量的变量值(....>o<....   有点绕)

第五行,不是肯定执行到 goto parameters_erro, 当前的表达式为真时不会执 || 后面的表达式

所以的第六行可以被执行到
作者: zaqmlp    时间: 2020-2-27 14:01

本帖最后由 zaqmlp 于 2020-2-27 14:02 编辑

开延迟就行了,判断存不存在可用define
  1. set a=1
  2. set b_1=2
  3. call echo;%%b_%a%%%
  4. setlocal enabledelayedexpansion
  5. echo;!b_%a%!
  6. pause
复制代码

作者: Batcher    时间: 2020-2-27 16:54

回复 5# verbs


有几个变量嵌套的例子可以参考一下
http://bbs.bathome.net/thread-2899-1-1.html
作者: verbs    时间: 2020-3-18 14:59

回复 7# Batcher


    非常感谢,学习了。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2