如何将字符串列表作为参数传递给批处理脚本?

时间:2015-03-02 12:46:59

标签: batch-file

我的批处理脚本用于处理字符串列表,我想对其进行参数化,以便它接受此列表作为用户的参数。

这就是我的代码目前处理此列表的方式:

set QUEUES=cars plans others
FOR %%q IN (%QUEUES%) DO Call :defineQueues %%q

如何将此列表作为参数传递给QUEUES varibale?

例如,我应该如何将其传递给此脚本:

myScript.bat ?

4 个答案:

答案 0 :(得分:4)

你必须用引号括起你的字符串:

myScript.bat "cars plans others"

然后%1将等于"cars plans others"

%~1%删除引号,只获取cars plans others

否则,您将获得3个不同的参数值:

myScript.bat cars plans others

%1 => cars
%2 => plans
%3 => others

答案 1 :(得分:2)

对不起。我读了这个问题,我无法抗拒澄清一些关于它的观点的诱惑。

批处理文件通常会收到几个单词作为参数,如下所示:

myScript.bat cars plans others

以前的批处理文件接收3个参数,这些参数可以通过%1,%2和%3进行处理。如果您希望单个参数接收多个单词,则所有单词必须用引号括起来:

myScript.bat "cars plans others"

上一批文件接收一个参数,其中包含可通过%1处理的多个单词。请注意,以下行与前面的示例完全相同:

set QUEUES=cars plans others
myScript.bat %QUEUES%

上一批文件接收 3参数,并且:

myScript.bat "%QUEUES%"

...上一批文件接收一个参数


list 是一个变量,包含多个以空格分隔的值,如下所示:

set QUEUES=cars plans others

您可以通过以下方式将此列表作为参数传递给批处理文件:

myScript.bat QUEUES

上一批文件接收一个参数,它是 list 变量。要在myScript.bat中处理列表的值,请使用以下方法:

setlocal EnableDelayedExpansion
FOR %%q in (!%1!) DO echo %%q

数组是一个由数字下标标识的元素组成的变量,如下所示:

set NAMES[1]=cars
set NAMES[2]=plans
set NAMES[3]=others

数组通常有一种简单的方法来知道其中的元素数量;例如:

set NAMES.length=3

您可以将此字符串数组作为参数传递给批处理文件:

myScript.bat NAMES

上一批文件接收一个参数,它是一个数组。要在myScript.bat中处理数组的元素,请使用以下方法:

setlocal EnableDelayedExpansion
FOR /L %%i in (1,1,!%1.length!) DO echo !%1[%%i]!

答案 2 :(得分:0)

或者,如果您只在命令行上传递QUEUES值,则可以使用%*批处理文件运算符,该运算符是对该行上所有参数的通配符引用。

@echo off
FOR %%q IN (%*) DO echo %%q

执行批处理文件,如下所示:

x.bat cars plans others

给出输出:

C:\junk>x.bat cars plans others
cars
plans
others

C:\junk>

如果您将该命令的任何其他参数与QUEUES元素it is not that simple to 'shift' the other arguments out一起传递。

答案 3 :(得分:0)

您可以将其称为myScript.bat %QUEUES% 并且您可以使用以下代码在myScript.bat

中获取它
setlocal EnableDelayedExpansion
FOR %%q in (!%1!) DO echo %%q