[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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的意义是什么

其中一个作用是,可以看看在for循环中设置的所有变量情况,你可以在设置变量的此for循环外,加上一句代码观察一下即知:
  1. set $
复制代码

TOP

相当于变量名字前缀(为了方便后面列出带前缀的变量)

TOP

相当于定义一个数组 nic
  1. set nic%%i=%%j
复制代码

TOP

也可能 %%i 是一些不能被定义为变量的值,如 set 1=2
bat小白,请多指教!谢谢!

TOP

大致明白了,谢谢大家

TOP

本帖最后由 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产生冲突。

TOP

回复 7# qixiaobin0715


   谢谢大佬指点!
大概就是保守说法,用法比较特殊,极易出错,可能慢慢就被“禁止”了。如此贴 http://www.bathome.net/redirect.php?goto=findpost&amp;ptid=6272&pid=40593
bat小白,请多指教!谢谢!

TOP

回复 8# 77七
实际上还是显示的问题。
比如set 1a=true
这么显示就没有问题:
set 1a
或者在变量延迟下
echo,!1a!

TOP

还有一个比较重要的作用:避免与系统环境变量冲突。
%%i 的值如果是 Path、errorlevel 或其它,可能会发生不可预知的后果。

与 echo 后面加 ; 或 , 一样,习惯就好了。

TOP

返回列表