所以我试图将一个数组从我的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[]"
。我究竟做错了什么?
注意:主要目标不是打印数组,而是对数组中的每个值执行一些操作。印刷只是一个例子。
编辑:我设法终于做到了,找到了一些解决方法:) 我不会发表我是如何做到的,因为它是“重复”,不是吗? 欢呼声。答案 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?。