【问题标题】:"\n" is not being recognized properly in Windows command lineWindows 命令行中无法正确识别“\n”
【发布时间】:2016-04-20 04:32:52
【问题描述】:

由于格式限制,我正在尝试发出一个需要换行符的命令。

我需要将文件提交到 CVS 存储库,但该存储库有一个限制,要求将消息包含在以下格式中。

Change #: <number>
Description: <description>

用于提交文件的命令是:

cvs commit -m "Change #: <number>\nDescription: <description>" <filename>

但是,当我发出命令时,它似乎没有正确识别换行符,并且它失败说我给了它一个无效的更改 # 并且没有描述。

如何让它识别新行而不尝试发出两个单独的命令?

【问题讨论】:

  • 也许 "\r\n" 是真正的 Windows 换行符?
  • 我试了一下,也没用 :(
  • 这也不行。引号似乎把胡萝卜弄乱了。
  • 旧版 Windows 命令行没有那么复杂。除非cvs 本身提供了插入换行符的机制,否则您将需要使用其他东西;如果您不想使用 GUI,Adam 对 Powershell 的建议似乎是合理的。

标签: windows command-line command newline command-prompt


【解决方案1】:

我实际上是在尝试从 Perl 脚本调用此命令,并找到了可接受的解决方法。出于某种原因,将命令调用为 system 命令似乎会失败,但如果您使用反引号调用它,它就可以正常工作。

# Fails
system 'cvs commit -m "Change #: <number>\nDescription: <description>" <filename>'

# Works
my $output = `cvs commit -m "Change #: <number>\nDescription: <description>" <filename>`

有趣的是,使用system 命令和反引号之间处理“\n”的差异似乎没有在任何地方记录。

【讨论】:

  • Documented here: "如果 [to system] 的参数是标量,system() 使用 shell 执行命令"。
【解决方案2】:

试试这种格式的powershell:

启动进程 -FilePath cvs.exe -ArgumentList "commit -m `"更改 #:123 `nDescription:my description`""

【讨论】:

  • 如何在脚本中使用换行符?也能解决this problem 吗?
  • 实际上.. 这是一个有趣的帖子。我没有意识到解析器在这个意义上被破坏了(如果它确实被验证了)。我相信 start-process 使用 createprocess,如果是这样应该没问题,但让我们看看。
  • 哦,你的意思是一个Powershell脚本;我的错。那时可能不相关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 2021-03-09
  • 2016-06-05
相关资源
最近更新 更多