【问题标题】:Passing calculated paths with spaces使用空格传递计算路径
【发布时间】:2012-01-16 16:40:50
【问题描述】:

我在这里尝试了一些非常简单的事情,但无法弄清楚我哪里出错了。我发现了许多其他有用的讨论 - particularly here - 但没有找到任何涵盖我的特定场景的东西。

在 powershell 中,我输入了以下内容:

$path = "c:\program files\"
$path2 = "c:\program files\fred2\"
echoargs $path $path2
echoargs "$path" "$path2"

在对 echoargs 的两次调用中,我都得到了

Arg 0 is <c:\program files" c:\program>
Arg 1 is <files\fred2">

返回结果。如何正确获取要传递的参数?

注意:在我的真实脚本中,路径变量是由几个配置参数构建的,所以我不能直接在单引号中传递它们。

【问题讨论】:

  • 请包含更多您的实际代码。当我尝试你的样品时,我得到了c:\program files\ c:\program files\fred2\
  • @AndyArismendi 很奇怪。我刚刚从这个问题直接复制+粘贴回powershell ISE,并完全按照我的描述?您使用的是哪个版本的 powershell?我相信我正在使用 2.0
  • 是的,我刚刚定义了一个要测试的函数:function echoargs { $args[0]; $args[1] }
  • 对不起,我想我误解了。如果我现在明白了,echoargs 必须是另一个应用程序,并且您希望另一个应用程序接收一个带有空格的参数...

标签: powershell arguments


【解决方案1】:

您需要在执行范围内用单引号将结果字符串括起来:

echoargs "'$path'" "'$path2'"

这会将它们传递给在单引号内分隔的被调用应用程序,但由于整个字符串仍在双引号中,因此您的参数将被正确扩展。

【讨论】:

  • 我在这个问题上花了几个小时。单双引号组合终于让一切正常了!
  • echoargs : 无法识别术语“echoargs”
【解决方案2】:

在最新的PSCX 中,我们更新了 EchoArgs.exe,以便在接收应用程序看到的时候也显示整个命令行。在这种情况下,您会得到:

14 > 回声参数 $path $path2 Arg 0 是 c:\program 文件" c:\program Arg 1 是文件\fred2" 命令行: "C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program files\" "c:\program files\fred2 \"

似乎\" 导致尾随双引号在某处转义。顺便说一句,据我所知,在 CMD.exe 中也会发生同样的情况。如果您修改了路径以删除尾部斜杠(或者如果您使用正斜杠),则不会发生这种情况。

20 > $path = "c:\程序文件" 21 > $path2 = "c:\程序文件\fred2" 22 > 回声参数 $path $path2 Arg 0 是 c:\program 文件 Arg 1 是 c:\program files\fred2 命令行: "C:\Users\Keith\Documents\WindowsPowerShell\Modules\Pscx\Apps\EchoArgs.exe" "c:\program 文件" "c:\program files\fred2"

如果您从其他地方获得这些路径,您可以像这样删除尾部反斜杠:

$path = $path.TrimEnd("\")

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多