将数组作为参数从c#传递给批处理(不是重复)

时间:2018-06-19 10:21:40

标签: c# batch-file scripting

所以我试图将一个数组从我的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[]"。我究竟做错了什么?

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

编辑:我设法终于做到了,找到了一些解决方法:) 我不会发表我是如何做到的,因为它是“重复”,不是吗? 欢呼声。

1 个答案:

答案 0 :(得分:0)

您需要结合使用连接字符串,引用命令行参数和参数清除功能。

为了构建参数字符串,您需要将整数数组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?