【问题标题】:Why is my powershell command not working in my batch file?为什么我的 powershell 命令在我的批处理文件中不起作用?
【发布时间】:2019-09-03 08:47:58
【问题描述】:

所以,当我直接在 PowerShell 中运行它时,我的命令运行良好,但当我尝试在我的批处理脚本中使用它时会抛出错误。我正在尝试做的是将目录添加到系统路径,但来自批处理文件(我有理由)。我知道该怎么做,并且成功地做到了,但似乎无法解决这个问题。

我看了一些资料,多条命令用分号隔开,我相信这可能是这里的问题,但如果是,我不知道如何在命令中进行转义。

这是我尝试在批处理文件中使用的命令。

@echo off

powershell "[Environment]::SetEnvironmentVariable('path', "$([Environment]::GetEnvironmentVariable('path', 'machine'));C:\to\a\new\path",'Machine');"

这些是运行时出现的错误。

At line:1 char:106
+ ... , $([Environment]::GetEnvironmentVariable('path', 'machine'));C:\usr\ ...
+                                                                  ~
Missing ')' in method call.
At line:1 char:117
+ ... ment]::GetEnvironmentVariable('path', 'machine'));C:\usr\bin,'Machine ...
+                                                                 ~
Missing argument in parameter list.
At line:1 char:127
+ ... t]::GetEnvironmentVariable('path', 'machine'));C:\usr\bin,'Machine');
+                                                                        ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

我真的相信问题只是我试图在字符串中使用的第一个分号。

【问题讨论】:

  • 首先,您的代码中有两个( 和三个),因此括号不匹配是可以预料的。您是否不小心将一个命令复制/粘贴到其他内容的中间,因为正如上面的评论所说,我不确定您在这里要做什么。与第二个命令部分。
  • 其实我想通了...@Lee_Dailey
  • @Josh 这是因为我引用的内容
  • @AlienDrew - 是的,你的报价......位置很奇怪。 [咧嘴]

标签: powershell batch-file


【解决方案1】:

我想通了...我不是分号,而是引号。

我通过阅读Powershell in a batch file - How do you escape metacharacters?(在“引用头痛”部分)找到了解决方法。

所以现在它可以在命令格式如下时工作:

powershell "[Environment]::SetEnvironmentVariable('path', \""$([Environment]::GetEnvironmentVariable('path', 'machine'));C:\to\a\new\path\"",'Machine')"

【讨论】:

  • 我仍然不知道你想用C:\to\a\new\path\"",'Machine') 部分做什么。正如您所说,分号将命令分解,因此它本身没有任何意义。它不是转义并添加到字符串中的一部分,至少根据您发布的内容。
  • 好的@Josh...\"" 区域内的所有内容都应该是一个字符串。此字符串$([Environment]::GetEnvironmentVariable('path', 'machine'));C:\to\a\new\path\ 获取原始系统路径,并使用新路径附加到它。让我们将其表示为 $updatedPath ...然后命令看起来像(假设 updatedPath 设置为上述)powershell "[Environment]::SetEnvironmentVariable('path', \""$updatedPath\"",'Machine');"
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 2020-09-10
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多