我正在尝试运行一个对视频文件的一些命令进行处理。 视频文件名可能包含特殊字符,如空格,“和”等。因此,我的第一次尝试是在多个文件上中断:
objMedInfo=json.parse(proc.execsync('mediaInfo“'+currentfilename+'”--output=json').toString());
然后我想也许另一种格式会更健壮:
objMedInfo=json.parse(proc.execsync(“mediaInfo”,[currentfilename,“--output=json”]).toString());
但是,它根本不会运行。 有人能帮忙吗?
(特别是,为什么第二种形式不起作用?)
不确定这是否有用,看起来像是创可贴。
node.js中的execSync无法正确运行shell命令
希望能提供一些帮助,直到有更聪明的人看到这一点:)。
您需要转义引号,并防止任何cmd注入shinanigans。
function shellescape(a) {
let ret = []
a.forEach(function (s) {
if (/[^A-Za-z0-9_/:=-]/.test(s)) {
s = "'" + s.replace(/'/g, "'\\''") + "'"
s = s.replace(/^(?:'')+/g, '').replace(/\\'''/g, "\\'")
}
ret.push(s)
})
return ret.join(' ')
}
currentfilename = 'filenames"with\'quotesAnd Spaces;shutdown now;.jpg'
console.log('mediainfo ' + shellescape([currentfilename]) + ' --output=JSON')
// mediainfo 'filenames"with'\''quotesAnd Spaces;shutdown now;.jpg' --output=JSON