JSFL:FLfile.runCommandLine&正确转义Windows命令行参数的空格

时间:2012-02-02 17:20:54

标签: windows command-line-arguments jsfl

我正在研究一个JSFL脚本,它将导出WAV文件并使用lame.exe通过FLfile.runCommandLine将它们编码为MP3。我无法弄清楚如何正确地逃避命令行中的空格以使其工作。

var command_line = '"C:\pathWithSpaces in pathname\lame.exe" -option1 -option2 "C:\different pathWithSpaces\targetfile.wav" "C:\different pathWithSpaces\targetfile.mp3"' ;
FLfile.runCommandLine (command_line);

导致命令窗口:

  

'C:\ pathWithSpaces'不会被视为内部或外部   命令,可操作程序或批处理文件。

我尝试用'%20'和carrat-space'^'替换空格,两者都失败了。 var command_line被验证在手动剪切并粘贴到命令窗口时工作,在JSFL脚本中运行表单时,这些空格似乎只是一个问题。

(简单地从环境中的任何路径中删除空格都不是一种选择.command_line var是动态生成的,必须能够处理空间以便对其他人有用。)

5 个答案:

答案 0 :(得分:0)

这可能不是问题所在。你需要转义反斜杠:C:\\ pathWithSpaces in pathname \\ lame.exe"

另一种方法是使用正斜杠,窗口也能理解。

答案 1 :(得分:0)

你知道,我可能错了!我试了很多选择,但没有运气。我认为这可能与多个论点有关......如果没有进一步的调查,我们不确定。

一个简单的解决方法是将命令保存到批处理文件,然后运行:

var command = '"C:/pathWithSpaces in pathname/lame.exe" -option1 -option2 "C:/different pathWithSpaces/targetfile.wav" "C:/different pathWithSpaces/targetfile.mp3"';
FLfile.write('file:///C|/temp/lame.bat', command);
FLfile.runCommandLine('"c:/temp/lame.bat"');

希望有所帮助:)

答案 2 :(得分:0)

在Dave的带领下,我最终得到了这段代码:

//get users temp folder& convert to URI
var win_tempLamePath =FLfile.getSystemTempFolder()+'lame.bat';
var win_tempLameURI =FLfile.platformPathToURI(win_tempLamePath);
//generate proper syntax for windows CMD
var win_fileURI = (FLfile.uriToPlatformPath(<URI for target WAV file>);
var win_command =('"'+win_uri+'lame.exe" -V0 -h "' + win_fileURI + '.' + wav +'" "' + win_fileURI + '.mp3" 2> "'+ win_fileURI+'.txt'+'"');
//write the command to lame.bat(aka win_tempLameURI)  & execute
FLfile.write(win_tempLameURI, win_command);
FLfile.runCommandLine(win_tempLamePath);

注意win_command

末尾的块
 2> "'+ win_fileURI+'.txt'+'"

将LAME.EXE输出到文本文件。通常“&gt;”在Windows cmd中执行此操作,但LAME.EXE使用需要“2&gt;”的奇数输出方法同样的效果,正如我在this thread

中学到的那样

答案 3 :(得分:0)

您根本不需要运行.bat文件。您的问题是,在调用runCommandLine之前,您没有将可执行URI的路径转换为平台路径。您的代码应如下所示:

var exe_path = FLfile.uriToPlatformPath("C:\pathWithSpaces in pathname\lame.exe");

var command_line ='"' + exe_path + '" -option1 -option2 "C:\different pathWithSpaces\targetfile.wav" "C:\different pathWithSpaces\targetfile.mp3"';

FLfile.runCommandLine (command_line);

答案 4 :(得分:0)

我想我找到了答案。您需要额外的报价。

var filePath = '"c:/somepath"'
var argument = '"argument"'
FLfile.runCommandLine('"'+ filePath + ' ' + argument +'"');

所以你最终传递的内容似乎是

""c:/somepath" "argument""

请注意附加的引号