问题 当path有空格时,无法执行child_process.exec()


我在用 appjs * 我想执行一个命令来打开一个文件夹。

我拥有的

var path = __dirname + '/folder to open/'; 
// path = C:\Program Files\myapplication/folder to open/
require("child_process").exec("start " + path);

错误

找不到文件C:\ Program

我尝试了什么

我已经试图逃离空间,这是行不通的。

var path = __dirname + '/folder to open/'; 
path = path.replace(' ', '\ ');
// path = C:\Program Files\myapplication/folder to open/
require("child_process").exec("start " + path);

当我在引号之间放置路径时,没有打开文件夹,只有另一个提示。

var path = "\"" + __dirname + "/folder to open/\"";
path = path.replace(' ', '\ ');
// path = "C:\Program Files\myapplication/folder to open/"
require("child_process").exec("start " + path);

相关的bug https://github.com/isaacs/npm/pull/2479

有没有人有修复或解决方法?

*链接已删除


6554
2018-05-06 09:19


起源

逃生空间? path = path.replace(' ', '\ '); 将路径设为字符串? `path ='“/ path to open /”'; - Andreas Hultgren
尝试将路径放在引号中 - Fluffy
转义空格不起作用:(也是,路径已经是一个字符串。 - Ron van der Heijden
甚至最糟糕的情况是您无法实际解决问题。我正在尝试生成“npm”的执行,并且因为npm安装在“Program Files”(此处为空格)中,它将无法正常工作。我甚至尝试通过在每个路径的乞讨和结尾添加“”来修改%PATH%变量,这既不起作用:( - Christian Adam


答案:


要打开包含空格的路径,必须使用双反斜杠替换。

在您的代码中,您转义了空格字符:

"\ "

你需要做的是转义反斜杠字符,使其成为输出字符串:

"\\ "

尝试这个:

var path = __dirname + '/folder to open/'; 

// Notice the double-backslashes on this following line
path = path.replace(/ /g, '\\ ');

require("child_process").exec("start " + path);

11
2017-11-18 15:50



这个解决方案是跨平台的吗? - Michael
@Michael,我还没有测试它是否是跨平台的。我怀疑它适用于每个平台。 - f1lt3r


好吧,我修好了。

或类似的东西。

而不是使用

"start " + path

我用了

"%SystemRoot%\\explorer.exe \"" + path + "\""

注意引号和正斜杠。


2
2018-05-06 14:06





这对我有用

f= file.replace(/ /g,"\\\ ")

0
2018-02-16 08:07



虽然此代码段可以解决问题, 包括解释 真的有助于提高你的帖子的质量。请记住,您将来会回答读者的问题,而这些人可能不知道您的代码建议的原因。 - Rosário Pereira Fernandes