【问题标题】:Print and assign array values to another variable in batch file打印并将数组值分配给批处理文件中的另一个变量
【发布时间】:2016-11-21 10:22:20
【问题描述】:

我在尝试打印数组值时遇到一些问题,如下所示:

@echo off
setlocal EnableDelayedExpansion 
set args=
set /A argc=0
SET /A argn=0
for %%a in (%*) do (
SET args[!argn!]=%%a
SET /A argn+=1
)

FOR %%q in (%*) DO (
echo !args[%argc%]! //not able to print the value
call echo  %%args[!argc!]%%  // this worked

if "%%q" == "--snap" (
      set /A argc+=1
      set SNAP=!args[%argc%]! //this didn't work
)
if "%%q" == "--source" (
      set /A argc+=1
      call SET "SOURCE=%%args[!argc!]%%" //this didn't work too          
)
set /A argc+=1
)

使用这段代码只打印数组的第一个值,但使用 for /l 的另一种方法可以正常工作。 我该如何纠正? 是否可以将此数组值存储在任何其他变量中?如果是这样,怎么做?

【问题讨论】:

  • for %%q in (%*) do ... 你的批处理文件从命令行获取了多少参数? BTW set /a argc+=1 是首选语法
  • 来自命令行的 13 个参数。 @elzooilogico
  • 数组是如何填充的?我不知道它是如何填充的?
  • 您必须使用call echo %%args[!argc!]%%for %%a in (!argc!) do echo !args[%%a]!
  • 数组填充为: set /a argn=0 for %%a in (/*) do ( set args[!argn!]=%%a set argn=!argn!+1 )

标签: windows batch-file scripting


【解决方案1】:

您正在尝试回显一个您尚未设置的变量,因此它将是空白的。

@Echo Off
SetLocal EnableDelayedExpansion 
Set argc=0
For %%q In (%*) Do (
    Set "args[!argc!]=%%q"
    Rem The next line is for information only   
    Call Echo=%%args[!argc!]%%
    Set/A argc+=1
)
Rem take a look at the variables
Set args[
Timeout -1

【讨论】:

  • 但是如何将此值分配给另一个变量? @Compo
  • 我不确定您指的是哪个值或哪个变量。 已经可以使用 %2%args[1]% 引用第二个参数,所以我真的不明白您为什么要再次将其设置为另一个变量。除非我知道更多,否则我无法真正提供建议。
  • 如何将 %%args[!argc!]%% 设置为其他变量?比如,设置 snap=%%args[!args!]%%。这行得通吗?
  • 您想将哪个参数设置为相等?如果您想将 snap 设置为等于所有这些,那么只需在脚本顶部执行此操作,Set "snap=%*"
【解决方案2】:

假设 delayedexpansion 已被调用并且 argn 已设置为 #args+1,如 cmets 中所报告的,

set /a argn-=1
for /L %%q in (0,1,%argn%) do echo !args[%%q]!
set /a argn+=1

会是我的偏好。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多