我的批处理脚本用于处理字符串列表,我想对其进行参数化,以便它接受此列表作为用户的参数。
这就是我的代码目前处理此列表的方式:
set QUEUES=cars plans others
FOR %%q IN (%QUEUES%) DO Call :defineQueues %%q
如何将此列表作为参数传递给QUEUES
varibale?
例如,我应该如何将其传递给此脚本:
myScript.bat ?
答案 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