nsIProcess with arg with quote未被创建
nsIProcess with arg with quote not getting created
我正在尝试运行一个小程序来转换一些。doc Word文件(使用LibreOffice)到HTML。当我在命令行上运行它时,它可以工作,但不能通过nsIProcess
:
var Cc = Components.classes;
var Ci = Components.interfaces;
var sofficePath = ('C:''Program Files (x86)''LibreOffice 4.0''program''soffice.exe').replace(/"/g, '');
var path = 'C:''Users''Brett''AppData''Local''Temp''brl-downloader6.doc';
function createProcess (path, args) {
var aNsIFile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
aNsIFile.initWithPath(path);
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(aNsIFile);
process.runAsync(args, args.length, null);
}
createProcess(sofficePath, [
'--headless', '-convert-to', 'html:"HTML (StarWriter)"', path.replace(/"/g, '')
]);
我认为这与html:"HTML (StarWriter)"
参数中的引号有关,但我不确定如何绕过它。
我也试过这个没有效果(单引号或双引号给出LibreOffice的错误,以下被忽略,但不能成功转换文件):
'--headless -convert-to html:"""HTML (StarWriter)""" ' + path.replace(/"/g, '')
怎么了?
nsIProcess
(Windows)将"转义"参数,即:
- 如果参数包含空格,则用
"
引号括起来。 - 如果参数包含任何
'
退格和/或"
引号,则用另一个'
转义。
有效地对html:"HTML (StarWriter)"
字符串进行了双转义。请使用html:HTML (StarWriter)
。
我遇到的另一个问题是,我的Libreoffice(4.2)副本实际上会将文件写入当前工作目录,在Firefox的情况下通常是C:'Program Files (x86)'Mozilla Firefox
,不可写。所以最好也提供一个-outdir
.
这在Scratchpad中为我工作(注意,我从你的代码中更改了路径):
var Cc = Components.classes;
var Ci = Components.interfaces;
var sofficePath = ('C:''Program Files (x86)''LibreOffice 4''program''soffice.exe').replace(/"/g, '');
var path = 'C:''Temp''test.odt';
function createProcess (path, args) {
var aNsIFile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile);
aNsIFile.initWithPath(path);
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(aNsIFile);
process.runAsync(args, args.length, null);
}
createProcess(sofficePath, [
'-headless', '-convert-to', 'html:HTML (StarWriter)', '-outdir', 'C:''Temp', path.replace(/"/g, '')
]);
生成这个命令行(在Process Monitor中查看):
"C:'Program Files (x86)'LibreOffice 4' Program ' office.exe" -headless -convert-to "html: html (StarWriter)"-outdir C:'Temp C:'Temp 'test.odt
无论如何,HTML (StarWriter)
过滤器实际上不是必要的,只是html
对我来说工作得很好(并且实际上产生相同的输出)。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- Fighting with FRP
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- issue with FB.Event.subscribe
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- nsIProcess with arg with quote未被创建
- 如何创建'chaining'JavaScript API with intermediate '