如何在powershell [],"",|中逃避这些角色

时间:2016-11-25 20:02:43

标签: powershell powershell-v2.0

我想将以下条目从PowerShell传递给cmd行。怎么办?

["192.168.10.1|443|Atulkatiyar|passw$h"]

如何在PowerShell命令中编写并可以在命令行中执行?

3 个答案:

答案 0 :(得分:0)

$content

cmd --% /c ["192.168.10.1|443|Atulkatiyar|passw$h"] 是一个转义序列,其后的所有内容都传递给未修改的可执行文件

答案 1 :(得分:0)

cmd.exe /C "echo `[`"192.168.10.1`|443`|Atulkatiyar`|passw`$h`"`]"

答案 2 :(得分:0)

目前还不清楚你的意思是"传递到cmd行"。

从PowerShell的角度来看,如果您希望将问题中的字符串视为文字,只需将其括在'...'中(单引号;附上嵌入单引号(如果有),如''):

> '["192.168.10.1|443|Atulkatiyar|passw$h"]'
["192.168.10.1|443|Atulkatiyar|passw$h"]

如果要将此文字传递给cmd.exe,标准命令处理器同样适用:

> cmd /c echo '["192.168.10.1|443|Atulkatiyar|passw$h"]'
["192.168.10.1|443|Atulkatiyar|passw$h"]

也就是说,你的字符串包含$h,它看起来像是对PowerShell变量的引用 - 如果你想首先展开(插入)引用,需要采用不同的方法;在以下命令中,使用带有二元运算符+的字符串连接:

> $h = 'Hi!'

> ('["192.168.10.1|443|Atulkatiyar|passw' + $h + '"]' )
["192.168.10.1|443|Atulkatiyar|passwHi!"]

> cmd /c echo ('["192.168.10.1|443|Atulkatiyar|passw' + $h + '"]' )
["192.168.10.1|443|Atulkatiyar|passwHi!"]

或者,通常情况下,您可以使用 double 引用的字符串来嵌入应该展开的变量引用($<varName>)和子表达式($(...)) / em>(插值:替换为它们的值) - 在这种情况下,使用`(反引号)来转义嵌入的"(以及$字符(如果需要):

> "[`"192.168.10.1|443|Atulkatiyar|passw$h`"]"
["192.168.10.1|443|Atulkatiyar|passwHi!"]

> cmd /c echo "[`"192.168.10.1|443|Atulkatiyar|passw$h`"]"
["192.168.10.1|443|Atulkatiyar|passwHi!"]

其他选择:

  • 您可以使用二进制-f运算符进行字符串格式化,其中LHS包含占位符,例如{0}(第一个操作数),它们使用RHS上的值进行实例化(基于.NET)框架的String.Format method - 另见here):
> ('["192.168.10.1|443|Atulkatiyar|passw{0}"]' -f $h)
["192.168.10.1|443|Atulkatiyar|passwHi!"]

> cmd /c echo ('["192.168.10.1|443|Atulkatiyar|passw{0}"]' -f $h)
["192.168.10.1|443|Atulkatiyar|passwHi!"]
  • 在PSv3 +中,如上所述,特殊--%&#34;停止解析&#34; switch允许您将剩余的参数传递到cmd.exe as 之外的cmd.exe样式的环境变量引用,例如{{ 1}};请注意,这意味着PowerShell变量引用和子表达式将展开。