【问题标题】:How to pass a list of strings to a batch-script as a parameter?如何将字符串列表作为参数传递给批处理脚本?
【发布时间】:2023-03-29 00:38:01
【问题描述】:

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

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

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

我应该如何将此列表作为参数传递给QUEUES 变量?

例如,我应该如何将它传递给这个脚本:

myScript.bat ?

【问题讨论】:

    标签: batch-file


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      或者,如果您只在命令行上传递您的 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】:

      对不起。我读了这个问题,忍不住想澄清几点。

      一个批处理文件通常接收几个单词作为参数,比如这些:

      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
      

      上一个批处理文件接收一个参数,它是一个列表变量。要处理 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]!
      

      【讨论】:

      • 感谢您的准确澄清。
      【解决方案4】:

      你可以叫它myScript.bat %QUEUES% 您可以使用下面的代码在您的myScript.bat 中获取它:

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

      【讨论】:

      • 发布代码时,请考虑使用正确的格式:代码应缩进4个空格,行内代码应包含在“`”中。
      • @Ivan 感谢您更正格式。我是新来的,刚开始帮助别人
      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2016-01-08
      相关资源
      最近更新 更多