标题: [其他] 这行批处理代码中的$代表什么意思? [打印本页]
作者: lookupsme 时间: 2024-1-22 15:59 标题: 这行批处理代码中的$代表什么意思?
for /f "skip=1tokens=1*" %%i in ('wmic Nic where "Manufacturer<>'Microsoft' and NetConnectionStatus='2'" get Index^,NetConnectionID^') do (
for /f "tokens=1* delims=:" %%j in ("%%j") do (
set $%%i=%%j
……)……)
1、这里的set $%%i=%%j为什么有个$
2、我测试了下,好像%%i的值也没有改变,这里set $%%i=%%j的意义是什么
作者: qixiaobin0715 时间: 2024-1-22 16:11
其中一个作用是,可以看看在for循环中设置的所有变量情况,你可以在设置变量的此for循环外,加上一句代码观察一下即知:复制代码
作者: Five66 时间: 2024-1-22 18:23
相当于变量名字前缀(为了方便后面列出带前缀的变量)
作者: newswan 时间: 2024-1-22 18:57
相当于定义一个数组 nic复制代码
作者: 77七 时间: 2024-1-22 21:06
也可能 %%i 是一些不能被定义为变量的值,如 set 1=2
作者: lookupsme 时间: 2024-1-23 09:06
大致明白了,谢谢大家
作者: qixiaobin0715 时间: 2024-1-23 10:12
本帖最后由 qixiaobin0715 于 2024-1-23 11:13 编辑
回复 5# 77七
没听说过数字不能作为变量名事啊:- C:\Users\Administrator>set 1=2
-
- C:\Users\Administrator>set 1
- 1=2
-
- C:\Users\Administrator>
复制代码
cmd黑色窗口测试结果。
1是变量名
2是变量1的值
没什么问题吧。
set /?查阅,只是说变量名中不能含有等号。
试了试,使用变量延迟,如果变量名中的等号在双引号中,居然也能作为变量名的字符。- @echo off
- setlocal enabledelayedexpansion
- set 1"a=b"p=a
- echo,!1"a=b"p!
- pause
复制代码
实践是检验真理的唯一标准,这句话真好。
注意不要与%0~%9冲突即可。总之,以数字作为变量名在变量延迟中使用应当不会有什么问题,如果使用 %变量名% 显示变量值,则有可能与%0~%9产生冲突。
作者: 77七 时间: 2024-1-23 15:54
回复 7# qixiaobin0715
谢谢大佬指点!
大概就是保守说法,用法比较特殊,极易出错,可能慢慢就被“禁止”了。如此贴 http://www.bathome.net/redirect.php?goto=findpost&ptid=6272&pid=40593
作者: qixiaobin0715 时间: 2024-1-23 16:21
回复 8# 77七
实际上还是显示的问题。
比如set 1a=true
这么显示就没有问题:
set 1a
或者在变量延迟下
echo,!1a!
作者: WHY 时间: 2024-2-3 22:19
还有一个比较重要的作用:避免与系统环境变量冲突。
%%i 的值如果是 Path、errorlevel 或其它,可能会发生不可预知的后果。
与 echo 后面加 ; 或 , 一样,习惯就好了。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |