【问题标题】:Pass a path with space as an argument传递带有空格的路径作为参数
【发布时间】:2019-05-23 08:44:26
【问题描述】:

我在调用批处理文件的 C# 中运行一些代码,我需要传递一个带有空格的路径作为参数,但它不起作用。

我尝试在批处理 %1、%~1、“%1”、“%1”中以不同方式调用我的参数。这些都不起作用。同样在我的 C# 代码中,我尝试将其转换为字符串,但它也不起作用

C# 代码。

string argument =   textBox10.Text.ToString()  ; 
string command = @"/c powershell -executionpolicy unrestricted X:\PathToBatch\Run.bat" + " " + argument;
System.Diagnostics.Process.Start("cmd.exe", command);

批号:

echo %1
Pause

当我将参数 C:\Program Files\Test 作为目录传递时,它会打印“C:\Program”并停在空格处。 如何获取完整路径?

【问题讨论】:

  • 到目前为止您尝试过什么?你必须使用这样的引用 + " """ + argument + """"; 并没有实际测试过这个。只是为了解释。
  • 当你echo "%*"时会发生什么
  • 当我去 %* 时,它会显示所有内容,但事实是我有 6 个 arg,所以我可能无法使用它。我的命令行看起来像这样:@"/c powershell -executionpolicy unrestricted X:\PathToBatch\Run.bat" + " " + arg1 + " " + arg2 + " " + arg3
  • 我也已经尝试过使用引号了
  • 为什么使用powershell而不是直接运行批处理文件?引入 powershell 作为中间人让事情变得更加复杂

标签: c# batch-file


【解决方案1】:

试试这个:

string command = @"/c powershell -executionpolicy unrestricted X:\PathToBatch\Run.bat"+ " \""+ argument +"\" ";
System.Diagnostics.Process.Start("cmd.exe", command);

这将在您的控制台中“写入”以下行:

/c powershell -executionpolicy unrestricted X:\PathToBatch\Run.bat "C:\Program Files\Test"

【讨论】:

  • 只有“C:\Program”被打印,你还有同样的问题吗?
  • 是的,当我有几个参数时,下一个参数取值'Files\Test'
  • 我不是批处理专家,但通过查看网络,唯一可能导致这种情况发生的事情就是忘记命令行上的双引号。尝试像这样在 cmd 中手动编写它:/c powershell -executionpolicy unrestricted X:\PathToBatch\Run.bat "C:\Program Files\Test" 如果您仍然有相同的结果,那么批处理有问题。 (或者和我一起,但无论如何我认为我不能再帮你了)
【解决方案2】:

将您的论点用双引号括起来,如下所示:"C:\Program Files\Test"

问题是您的参数包含一个空格,因此它被视为两个不同的参数

【讨论】:

  • @Le Pain,为您的代码设计了一个解决方案。我的观点是,如果你想传递一个包含空格的参数,那么你必须引用它,所以 shell 也会将它视为一个参数
  • 即使被引用了仍然有同样的问题
  • @RhonYz 检查这个问题:stackoverflow.com/questions/5510343/… 它可能对你有帮助
【解决方案3】:

它使用简单的引号“'” + arg +“'”,并在批处理中将其称为 %~1

【讨论】:

    猜你喜欢
    • 2010-10-03
    • 2011-11-24
    • 2014-07-20
    • 2015-02-20
    • 2021-03-23
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多