C#命令行参数和ls

时间:2009-03-16 09:03:41

标签: c# .net bash ls msys

我正在使用MSYS在Windows上获得一些理智的脚本化shell:)。

现在我正在编写一个用C#编写的控制台应用程序,它接受许多参数并在对话框中将这些参数作为选项呈现给用户。实际选项对应于我用ls检索的文件名。

但是,如果我的文件名中包含空格,则会出现问题。假设我的文件名为:

file name
with spaces

在一个名为foo的目录中,我的C#可执行文件名为bar,在内部我检查“argv”数组的内容(即传递给我的应用程序的命令行参数,由.NET解释)。 p>

当我打电话时,会发生以下陌生感:

./ bar.exe“文件名”“带空格” - >

file name
with spaces

./ bar.exe $(ls foo) - >

file
name
with
spaces

./ bar.exe $(ls -Q foo) - >

"file
name"
"with
spaces"

有谁知道这里发生了什么?显然,.NET没有正确解析bash或ls传递的参数。

但即使我添加引号,引号也包含在参数中,而不是将两个参数合并为一个。

有没有办法让我进入未经处理的命令行,所以我可以看到控制字符或其他东西是否出现了无聊的情况?

非常感谢任何见解!

3 个答案:

答案 0 :(得分:1)

您可以使用Environment.CommandLine获取原始命令。不确定bash的东西,对不起;也许涉及行尾的事情(CR vs LF vs CRLF vs LFCR)。

答案 1 :(得分:0)

我认为问题是你在命令行中传递参数而命令行将每个单词作为单独的参数读取;尝试做“文件名”“有空间”..
如果您通过代码使用

传递它
ProcessStartInfo.Arguments = "\"File Name \"" ;

作为您的过程的参数

答案 2 :(得分:-1)

我在使用RegawMOD.Android

的项目中使用了这个
Device device = android.GetConnectedDevice(android.ConnectedDevices[0]);

objArray = new object[] { "ls", string.Concat("/sdcard/")) };

str = Adb.ExecuteAdbCommand(Adb.FormAdbCommand(device, "shell", objArray));
// or 
// str= Adb.ExecuteAdbCommand(Adb.FormAdbCommand("shell",objArray));

有关更多命令选项,请查看此Commands