【问题标题】:Pass array as an argument from c# to batch (not a duplicate) [duplicate]将数组作为参数从 c# 传递给批处理(不重复)[重复]
【发布时间】:2018-11-28 06:40:22
【问题描述】:

所以我试图将一个数组从我的 C# 代码发送到一个批处理文件,我需要在该文件上执行一个 for-each 循环。

我的 C# 代码:

string MyBatchFile = {the batch file path}
int[] x = {1,2,3};
var process = new System.Diagnostics.Process
{
    StartInfo =
    {
       Arguments = String.Format("{0}", x)
    }
};
process.StartInfo.FileName = MyBatchFile;
process.Start();

我的批处理文件:

set array=%1
FOR %%x IN %array% DO (
echo %%x
/*Some more lines here*/
)
pause

这似乎不起作用,如果我打印%array%,我会得到"System.Int32[]"。我究竟做错了什么?

注意:主要目标不是打印数组,而是对数组中的每个值执行一些操作。印刷只是一个例子。

编辑:我终于成功了,找到了一些解决方法:) 我不会公布我是如何做到的,因为它是“重复的”,不是吗? 干杯。

【问题讨论】:

  • 这不是给你"System.Int32[]"的C#代码,如果你调用Int32[].ToString(),那是你得到的。无论如何,如果您有一个要打印为单个字符串的数组,请按照副本中的说明查看string.Join()
  • 您好,谢谢您的回复。但是,正如我所说,我需要执行一个 for-each 循环,而不仅仅是打印数组,打印是一个示例(并且只是代码的一小部分),这就是我写 "/*some more这里的行*/" 。我的问题仍未得到解答。
  • 能否请您从这个问题中删除“重复”标签,我认为它具有误导性。 @CodeCaster
  • 这不是误导。您的 C# 代码不包含整数数组。创建一个minimal reproducible example。如果它确实包含一个整数数组,请参阅副本以了解如何将其打印为逗号分隔的字符串。
  • 对代码添加了一些更改,并重新表述了问题的某些部分。所以现在重点 - 我需要在批处理文件中对 int 数组执行 for-each 循环,我不需要打印它

标签: c# batch-file scripting


【解决方案1】:

您需要结合使用连接字符串、引用命令行参数和参数清理。

为了构建您的参数字符串,您需要将您的整数数组String.Join() 转换为单个字符串:

new StartInfo
{
    Arguments = string.Format("\"{0}\"", string.Join(" ", x));
}

现在arguments 包含字符串"1 2 3",包括引号。这使它成为批处理文件的单个参数。

然后在批处理文件中,你需要清理参数,然后你可以循环它:

@ECHO OFF

REM Copy the argument into a variable
SET array=%1
REM Trim the quotes from the variable
SET array=%array:"=%

REM Loop over each space-separated number in the array
FOR %%A IN (%array%) DO (
    ECHO %%A
)

参考资料:

您仍然可以使用逗号分隔的方式,请参阅How to loop through comma separated string in batch?

【讨论】:

  • 我真的只是想将此问题标记为已回答,感谢您的宝贵时间,也许也道歉。但现在它再次被标记为重复。这实在是太荒谬了。我不会再浪费时间尝试了。祝你好运,如果我冒犯了你,我深表歉意。
  • 没问题,这是一个很好的练习,我希望我也没有冒犯你。
猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 2013-07-24
  • 2020-07-09
  • 2013-07-07
  • 2011-04-07
  • 2014-12-27
  • 2013-11-11
相关资源
最近更新 更多