如何在批处理文件中使用逗号分隔符调用参数

17

我想调用一个带有逗号分隔参数的批处理文件。该如何实现?

我想要的效果就像这个例子一样。

我有一个名为text.bat的脚本:

@echo off
set test=%1
echo Sample %test% batch.

我想像这样运行批处理程序:

c:\text.bat this,is,sample

我期望得到这样的结果:

Sample this,is,sample batch.

你有任何想法如何实现这个吗?

谢谢。


感谢您的评论。抱歉,我在这里很新。 - quinekxi
2个回答

21

哇!我不知道逗号会有那种用法。

你有两个选择。

你可以使用这个脚本:

@echo off
set test=%~1
echo Sample %test% batch.

并使用以下命令运行:

C:\text.bat "this,is,test"

%~1 表示第一个无引号的参数。 引号将逗号分隔的列表作为单个参数进行分组。

或者

您可以使用此脚本:

@echo off
set test=%*
echo Sample %test% batch.

然后使用以下方式运行:

C:\text.bat this,is,test
%*代表命令行参数的输入方式。

我刚写了一个循环,将所有参数甚至超过%9的参数移入一个单独的变量中,但我卡住了,因为其中一个参数是“a、b”,而%*是最好的解决方案。谢谢。 - Jürgen Steinblock
3
不只是逗号 ,,分号 ; 和等号 = 也是命令提示符中的定界符,参考链接 https://ss64.com/nt/syntax-esc.html。 - phuclv

14
在批处理文件中,参数分隔符除了空格外,还包括逗号、分号和等号,因此没有直接的方法来实现。唯一的选择是用引号括起参数:c:\text.bat "this,is,sample" 并使用 %~1 获取参数以消除引号:set test=%~1

你的回答提供了一些有价值的信息,即逗号、分号和等号作为参数定界符。这解释了为什么 shift 会分隔逗号分隔的字符串。另一个回答没有提到这一点。但是,您说原始帖子的唯一选项是使用 %~1。这并不正确;另一个回答提到的另一种选择是使用 %*。在这种情况下,逗号分隔的列表是否被引号包含都没有关系。 - Alan
1
@Alan:如果你仔细阅读问题,OP是在谈论“一个参数”,也就是说,一个参数。另一个答案需要使用_所有参数_,因此,例如,没有办法以相同的形式给出多个参数,比如c:\text.bat "this,is,sample" "second,param,with,commas"。唯一的方法是将_每个参数_用引号括起来,并使用%~1%~2... - Aacini
@Aacini,我明白了。 - Alan

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