2

我正在使用MSYS在 Windows 上获得一些理智的可编写脚本的外壳 :)。

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

但是,当我的文件名中包含空格时,就会出现问题。假设我有名为:

file name
with spaces

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

当我调用它时会发生以下奇怪现象:

./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 传递的参数。

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

有没有办法让我进入未处理的命令行,所以我可以看看控制字符是否发生了奇怪的事情?

任何见解将不胜感激!

4

3 回答 3

1

您可以使用Environment.CommandLine获取原始命令。不知道 bash 的东西,抱歉;可能涉及行尾(CR vs LF vs CRLF vs LFCR)。

于 2009-03-16T09:10:22.247 回答
0

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

ProcessStartInfo.Arguments = "\"File Name \"" ;

作为你的过程的论据

于 2014-02-03T10:21:52.290 回答
-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));

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

于 2014-02-03T09:35:02.773 回答