Shell 批处理文件引用/替换

Shell 批处理文件引用/替换,shell,batch-file,command-line,cmd,Shell,Batch File,Command Line,Cmd,我试图破译一个批处理文件,但代码中有一部分我很难理解: for /f "tokens=*" %%A in ('getmac') do set "macaddr1=%%A" echo %macaddr1 for /f "tokens=1" %%A in ("%macaddr1%") do set "macaddr1=%%A" set "macaddr1=%macaddr1:-=%" 根据我收集的信息,这段代码正在运行“getmac”命令,然后遍历并设置每一行,并将变量v设置为等于%a,这是get

我试图破译一个批处理文件,但代码中有一部分我很难理解:

for /f "tokens=*" %%A in ('getmac') do set "macaddr1=%%A"
echo %macaddr1
for /f "tokens=1" %%A in ("%macaddr1%") do set "macaddr1=%%A"
set "macaddr1=%macaddr1:-=%"
根据我收集的信息,这段代码正在运行“getmac”命令,然后遍历并设置每一行,并将变量v设置为等于%a,这是getmac命令的每一行

由于运行getmac命令返回的不仅仅是mac地址,第二行似乎正在执行并告诉它执行相同的操作,但这次只分配行的第一部分(即XX-XX-XX-XX-XX-XX-XX”格式的mac地址)

最后一部分是我难以理解的部分,它说

set "macaddr1=%macaddr1:-=%"
据我所知,这是某种程度上从格式中去掉“-”,只是将mac地址保留为XXXXXXXXXX格式

据我所知:中有一个替换运算符,根据set命令-=应该是“Subtract”变量,整个过程在%%内

我想我不明白这部分。它怎么知道减去破折号呢


还是我完全错了?

您的程序所做的不是减法,这是字符串替换的批处理语法。语法是
%VARIABLE:search=replace%
。搜索
=
之前的值,并替换为
=
之后的值


在您的例子中,它将用空字符串替换
-

它不是用于减法运算,减法运算是一种带有SET/A的算术运算符。它所做的是字符替换,即将-字符替换为零,或将$字符,这取决于您的问题中哪个语句不是打字错误。
-
不是“减法”但是“search”字符串。完整格式为
%变量:search=replace%
。此处搜索
-
,并替换为空字符串。