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

Pass array as an argument from c# to batch (not a duplicate)

本问题已经有最佳答案,请猛点这里访问。

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

我的C代码:

1
2
3
4
5
6
7
8
9
10
11
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();

我的批处理文件:

1
2
3
4
5
6
set array=%1
FOR %%x IN %array% DO (
echo %%x
/*Some more lines here*/
)
pause

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

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

编辑:我终于做到了,找到了一些解决方法:)我不会公布我是怎么做的,因为它是"复制品",不是吗?干杯。


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

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

1
2
3
4
new StartInfo
{
    Arguments = string.Format(""{0}"", string.Join("", x));
}

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

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

1
2
3
4
5
6
7
8
9
10
11
@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
)

参考文献:

  • 将整数数组转换为逗号分隔的字符串
  • 从批处理文件中的变量中删除双引号会导致命令环境出现问题。
  • 如何在Windows批处理文件中循环?

你也可以用逗号分隔的方式,看看如何批量循环使用逗号分隔的字符串?.