找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24670|回复: 9

[其他] 这行批处理代码中的$代表什么意思?

[复制链接]
发表于 2024-1-22 15:59:38 | 显示全部楼层 |阅读模式
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的意义是什么
发表于 2024-1-22 16:11:38 | 显示全部楼层
其中一个作用是,可以看看在for循环中设置的所有变量情况,你可以在设置变量的此for循环外,加上一句代码观察一下即知:
  1. set $
复制代码
发表于 2024-1-22 18:23:08 | 显示全部楼层
相当于变量名字前缀(为了方便后面列出带前缀的变量)
发表于 2024-1-22 18:57:55 | 显示全部楼层
相当于定义一个数组 nic
  1. set nic%%i=%%j
复制代码
发表于 2024-1-22 21:06:50 | 显示全部楼层
也可能 %%i 是一些不能被定义为变量的值,如 set 1=2
 楼主| 发表于 2024-1-23 09:06:09 | 显示全部楼层
大致明白了,谢谢大家
发表于 2024-1-23 10:12:26 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2024-1-23 11:13 编辑

回复 5# 77七
没听说过数字不能作为变量名事啊:
  1. C:\Users\Administrator>set 1=2

  2. C:\Users\Administrator>set 1
  3. 1=2

  4. C:\Users\Administrator>
复制代码
cmd黑色窗口测试结果。
1是变量名
2是变量1的值
没什么问题吧。
set /?查阅,只是说变量名中不能含有等号。

试了试,使用变量延迟,如果变量名中的等号在双引号中,居然也能作为变量名的字符。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set 1"a=b"p=a
  4. echo,!1"a=b"p!
  5. pause
复制代码
实践是检验真理的唯一标准,这句话真好。
注意不要与%0~%9冲突即可。总之,以数字作为变量名在变量延迟中使用应当不会有什么问题,如果使用 %变量名% 显示变量值,则有可能与%0~%9产生冲突。
发表于 2024-1-23 15:54:37 | 显示全部楼层
回复 7# qixiaobin0715


   谢谢大佬指点!
大概就是保守说法,用法比较特殊,极易出错,可能慢慢就被“禁止”了。如此贴 http://www.bathome.net/redirect.php?goto=findpost&amp;ptid=6272&pid=40593
发表于 2024-1-23 16:21:24 | 显示全部楼层
回复 8# 77七
实际上还是显示的问题。
比如set 1a=true
这么显示就没有问题:
set 1a
或者在变量延迟下
echo,!1a!
发表于 2024-2-3 22:19:24 | 显示全部楼层
还有一个比较重要的作用:避免与系统环境变量冲突。
%%i 的值如果是 Path、errorlevel 或其它,可能会发生不可预知的后果。

与 echo 后面加 ; 或 , 一样,习惯就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:21 , Processed in 0.019483 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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