【问题标题】:Powershell command from cmd doesnt replace line breaks来自 cmd 的 Powershell 命令不会替换换行符
【发布时间】:2017-05-31 03:56:06
【问题描述】:

我正在尝试替换文件中包含换行符的字符串。我为此使用命令行。

我试图在 CMD shell 和 PowerShell 中使用相同的命令,但是我似乎只能让它在后者中工作。

命令如下:

powershell -Command "(Get-Content client.properties -Raw).Replace('#test`r`n','test`r`n') | Set-Content client2.properties"

为什么这在 CMD shell 中不起作用,我该如何使它起作用?

【问题讨论】:

  • 您是在两个 shell 中运行完全相同的命令,还是在 powershell 命令的 cmd 等效项中运行?
  • 您能更详细地说明您的问题吗?您正在写它适用于 powershell 而不是 cmd 行。你必须使用普通的WIN命令行吗?
  • 我运行了完全相同的命令。我打开了一个 cmd shell 并运行它,我还尝试在一个 bat 文件中运行它。当我打开 Powershell 并运行命令时,它可以工作。我正在使用 Win 10。

标签: shell powershell cmd


【解决方案1】:

`r`n 转义序列在单引号内不起作用。

改用-replace 运算符并使用正则表达式转义:

powershell -Command "(Get-Content client.properties -Raw)-replace('#test\r?\n','test'+$([Environment]::NewLine)) | Set-Content client2.properties"

【讨论】:

  • 谢谢,现在可以正确识别换行符。但是添加换行符不起作用。它只是将“test\r?\n”粘贴为字符串。有什么想法吗?
  • 快到了。现在我得到一个 RuntimeException "-ireplace" 只允许 2 个元素,而不是 3 个。如果我只使用 "$([Environment]::NewLine)" 它可以工作,所以不知何故测试和换行符的连接是错误的。
  • 只需在测试和换行符周围设置“()”,因此在作为元素添加到 -replace 之前将其连接起来
  • 这有帮助。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2022-09-27
  • 2017-03-06
  • 2016-10-30
相关资源
最近更新 更多