2011-11-16 32 views
9

我想用逗号分隔的参数调用批处理文件。我怎样才能做到这一点?如何使用逗号分隔符调用批处理文件中的参数

我希望它像这个例子。

我与脚本text.bat:

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

我想运行批处理这样的:

c:\text.bat this,is,sample 

,我期待这样的结果:

Sample this,is,sample batch. 

任何想法我可以如何实现这一目标?

谢谢。

+0

感谢您的评论。对不起,我只是新来的。 – quinekxi

回答

14

哇!我不知道逗号的行为如何。

您有两种选择。

你可以使用这个脚本:

@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 

%*代表的命令行参数,因为他们打出来。

+0

感谢队友,它的工作!是的。逗号表现如此。 – quinekxi

+0

我刚刚写了一个循环,将所有参数甚至超出%9转换为单个变量,但由于一个参数为'a,b',但是'%*'是最佳解决方案,所以我被卡住了。谢谢。 –

8

在批处理文件中,参数分隔符除了空格,逗号,分号和等号之外,所以没有直接的方法可以做到这一点。唯一的选择是将参数括在引号之间:c:\text.bat "this,is,sample"并使用参数%〜1消除引号:set test=%~1

+1

谢谢队友。你的回答很简单,但解释一切。 :) – quinekxi

+0

您的答案增加了一些有价值的东西,这是逗号,分号和等号用作参数分隔符的事实。 (这向我解释了为什么'shift'分裂了逗号分隔的字符串。)另一个答案没有说这个。但是,您认为原始海报的唯一选择是使用'%〜1'。这不是真的;另一个选项(由其他答案提到)是使用'%*'。在这种情况下,用逗号分隔的列表是否用引号括起来并不重要。 – Alan

+1

@Alan:如果你读到这个问题,OP就在谈论“一个参数”,即* one *参数。另一个答案需要使用_all parameters_,例如,没有办法给出多于一个相同形式的参数,就像在'c:\ text.bat“中这样,是,sample,”second,param,with,逗号“'。唯一的方法是将_each parameter_封入引号中,并使用'%〜1'和'%〜2' ... – Aacini

相关问题