【问题标题】:Saving command arguments to array batch将命令参数保存到数组批处理
【发布时间】:2013-02-21 10:28:33
【问题描述】:

我正在寻找一种方法来创建批处理接收的参数数组。

示例:如果我运行 bfile.bat 1 2 3 4 5,我将得到一个包含 5 个单元格的数组 1, 2, 3, 4, 5

有什么想法吗?

【问题讨论】:

    标签: arrays batch-file arguments


    【解决方案1】:

    Windows 批处理脚本并不真正包含数组功能,因为没有像其他语言那样用于排序、长度等的数组成员函数。 Aacini 就此事写了thorough expository

    话虽如此,您可以很好地模拟数组来完成您所描述的。

    @echo off
    :: arr.bat -- simulates creation of an array with script arguments
    setlocal enabledelayedexpansion
    
    set args=%*
    set arr.length=0
    
    rem delayed expansion of %args% here to prevent if statement from freaking out
    rem if quotation marks or spaces are encountered
    if #!args!==# goto :usage
    
    rem ###############
    rem construct array
    rem ###############
    
    rem surround each argument with quotation marks and loop through them
    rem 1 "2 3" 4 becomes "1" ""2" "3"" "4" (keeping 2 and 3 grouped)
    for %%I in ("%args: =" "%") do (
    
        rem Pop quiz, hotshot.  Why did I not just use `set arr[!arr.length!]=%%~I`
        rem to strip the quotation marks?  Try it and see what happens.
        set val=%%I
        set arr[!arr.length!]=!val:"=!
    
        rem incrememt %array.length%
        set /a arr.length=!arr.length! + 1
    )
    
    rem ##############
    rem retrieve array
    rem ##############
    
    echo arr[] has a length of %arr.length%.
    
    rem arr.Ubound is the highest index in the array.  For instance, if the array
    rem has 4 elements, then !arr[%arr.Ubound%]! refers to %arr[3]%.
    set /a arr.Ubound=%arr.length% - 1
    for /L %%I in (0, 1, %arr.Ubound%) do (
    
        rem To retrieve an array element, expand the inner variable immediately
        rem while delaying expansion of the outer variable.
        echo arr[%%I] = !arr[%%I]!
    )
    
    goto :EOF
    
    :usage
    echo Usage: %~nx0 [arg [arg [arg]]] etc.
    

    这是一些示例输出。

    C:\Users\me\Desktop>arr
    Usage: arr.bat [arg [arg [arg]]] etc.
    
    C:\Users\me\Desktop>arr 1 "2 3" 4
    arr[] has a length of 3.
    arr[0] = 1
    arr[1] = 2 3
    arr[2] = 4
    
    C:\Users\me\Desktop>arr the quick brown fox jumps over the lazy dog, and so forth.
    arr[] has a length of 12.
    arr[0] = the
    arr[1] = quick
    arr[2] = brown
    arr[3] = fox
    arr[4] = jumps
    arr[5] = over
    arr[6] = the
    arr[7] = lazy
    arr[8] = dog,
    arr[9] = and
    arr[10] = so
    arr[11] = forth.
    

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多