【问题标题】:node's exec() not working because of a space in the URI name由于 URI 名称中有空格,节点的 exec() 无法正常工作
【发布时间】:2015-11-22 14:02:50
【问题描述】:
var exec = require('child_process').exec
var cmd = 'C:\\Users\\Johnny Cash\\Desktop\\executeme.exe'

exec(cmd, function(e, stdout, stderr) {
  console.log(e);
  console.log(stdout);
  console.log(stderr);
});

'C:\Users\Johnny' 未被识别为内部或外部命令

这一定是有史以来最新鲜的问题,但是我如何在窗户上用空格避开这些路径?它在空间上被切断了,我所做的任何事情(事先单次或双次转义)似乎都可以解决问题。 exec() 会做一些我不知道的格式吗?

【问题讨论】:

    标签: javascript node.js windows path escaping


    【解决方案1】:

    您需要使用 ^ (caret) char 从 URI 中转义空格字符:

    var cmd = 'C:\\Users\\Johnny^ Cash\\Desktop\\executeme.exe'
    

    【讨论】:

      【解决方案2】:

      execcommand 参数字符串中的任何空格都视为参数分隔符,因此您需要用双引号将整个路径都视为要运行的命令的路径:

      var cmd = '"C:\\Users\\Johnny Cash\\Desktop\\executeme.exe"'
      

      但使用execFile 可能更简洁,因为它的file 参数始终被视为文件路径,并带有单独的args 参数。然后你应该能够省略双引号换行。无论如何,execFile 有点精简,因为它不像exec 那样执行子shell。

      【讨论】:

      • 如果我需要将参数传递给exec 这是另一个带空格的长字符串怎么办?
      • @dsp_099 将参数单独双引号或使用execFile 并在其自己的数组参数中传递参数。
      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 2021-02-13
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多