批处理文件中的 %* 是什么意思?

60

我曾在批处理文件和命令行中见过%*的使用。

有人能举个例子,解释%*的典型用法吗?


1
这个回答解决了你的问题吗?%*是什么意思? - phuclv
@phuclv,我真的认为应该反转重复目标方向。这个问题似乎比你链接的那个更好作为规范。 - cigien
5个回答

68

这意味着“命令行中的所有参数”。

例如,当您想将批处理文件中的命令行转发到另一个程序时,它非常有用:

REM mybatchfile.cmd
echo You called this with arguments: %*
echo I will now forward these to the DIR command.
dir %*

32

在之前的回答中没有提到一个重要的点:%*会扩展为命令行中的所有参数,即使在执行SHIFT操作后也是如此。

通常,SHIFT操作会将参数%2移动到%1,将%3移动到%2等,因此%1不再可用。但是%*会忽略任何SHIFT操作,所以完整的参数列表始终可用。这可能是一种福音,也可能是一种诅咒。


13

%* 扩展为传递给脚本的完整参数列表。

通常在您想调用其他程序或脚本并传递与传递给您的脚本相同的参数时使用它。


5

我添加了指向页面存档版本的链接。请注意,文档中提到的是Windows XP。对于Windows 10,可能有不同的修改器可用。 - Michael Krupp

2
重要的是需要注意,%* 不会像单独的 %n 参数那样进行解析。例如,如果参数为:

a "b c" j=k d,e,f

那么 ECHO %* 将显示:

a "b c" j=k d,e,f

ECHO 1=%1 2=%2 3=%3 4=%4 5=%5 6=%6 7=%7 8=%8 9=%9 将显示:

1=A 2="B C" 3=J 4=K 5=D 6=E 7=F 8= 9=

区别在于如何处理包含特殊字符但未被引号括起来的参数。

这些特殊字符通常是:空格 & ( ) [ ] { } ^ = ; ! ' + , ` ~


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接