【问题标题】:execsync fails if passed special characters如果传递了特殊字符,则 execsync 失败
【发布时间】:2020-06-20 11:44:04
【问题描述】:

我正在尝试对视频文件运行一些命令以进行处理。视频文件名可能包含特殊字符,如空格、' 和 " 等。因此,我的第一次尝试在多个文件上中断:

objMedInfo = JSON.parse(proc.execSync('mediainfo "' + currentfilename + '" --output=JSON').toString());

然后我想也许另一种格式会更健壮:

objMedInfo = JSON.parse(proc.execSync("mediainfo", [currentfilename,"--output=JSON"]).toString());

但是,它根本不会运行。有人可以帮忙吗?

(特别是,为什么第二种形式不起作用?)

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    不确定这是否会有所帮助,并且似乎是创可贴。

    execSync in node.js doesn't run shell command properly

    希望能提供一些帮助,直到更聪明的人看到这一点:)。

    【讨论】:

      【解决方案2】:

      您需要转义引号并防止任何 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
      

      【讨论】:

        猜你喜欢
        • 2014-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2021-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多