javascript - NodeJS 与 Child_Process - 如何转义我的命令

标签 javascript node.js unix batch-file child-process

我目前正在使用带有child_process模块​​的nodejs。我们正在试验一些奇怪的批处理行为。

基本上,我们只想使用 xcopy 命令复制文件。

例如,我们这样做:

xcopy "C:/my/path/myfile.test" "C:/my/path/mynewfile.test*" => Does not work. Windows needs backslash
xcopy "C:\my\path\myfile.test" "C:/my/path/mynewfile.test*" => Does not work. We need to escape backslash
xcopy "C:\\my\\path\\myfile.test" "C:/my/path/mynewfile.test*" => Works...

所以我有一些问题。

  • 为什么xcopy的source参数需要反斜杠而 目标参数与斜杠一起使用吗?

  • 我正在使用spawn function of the child process module 。看来这并不能逃避什么。我尝试查看 Nodejs 的代码,但是......这并不容易!生成函数是否转义命令?

  • 如果我们确实需要自己转义命令,那么我们也想在 UNIX 上执行我们的命令。所以我推测转义方法不一样。我不想做一个

      if(window)
         escapeshellargWindow(arg)
      else if(unix)
         escapeshellargLinux(arg)
    

还有其他人遇到过此类问题吗?

最佳答案

不熟悉 Windows,但我的猜测是第一个参数中的正斜杠可能会被解析为 xcopy 命令的选项。任何以下参数都不会被这样处理,因此将起作用。

至于转义,问题不在于 spawn,而更多的是使用 \ 在 Javascript 字符串中进行转义的一般方法。所以如果你使用这个:

spawn('xcopy', [ 'C:\my\path\myfile.test', ... ])

那么这就是 spawn 将收到的内容(作为参数):

{ '0': 'xcopy', '1': [ 'C:mypathmyfile.test' ] }

同样:

> console.log( 'C:\my\path\myfile.test' )
C:mypathmyfile.test

所以如果你想在JS字符串中添加反斜杠,你需要对其进行转义:

> console.log( 'C:\\my\\path\\myfile.test' )
C:\my\path\myfile.test

但这仅适用于代码中的文字字符串(在 JS 中硬编码)。对于以某种形式计算或传递的字符串(例如从 process.argv 中的命令行),不需要额外的转义。

由于 spawn 不知道您传递给它的内容,因此它本身不会进行任何转义。

关于javascript - NodeJS 与 Child_Process - 如何转义我的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19268723/

相关文章:

javascript - 将时间 slider 与传单合并

node.js - Typescript 忽略 MakeDirectoryOptions 的 fs.d.ts 定义

javascript - 如何测试我的并发限制在 JavaScript 中是否有效?

c - POSIX/C : chdir() not changing the directory with spaces?

javascript - 为什么我的函数不被识别?

javascript - 在不创建空白的情况下按比例调整图像大小的最佳方法是什么?

Unix命令查找字符串集交集或异常值?

ruby-on-rails - 在 Mac OS 10.5.8 中安装 ImageMagick for paperclip gem

javascript - 如何使用重置按钮删除选择选项标签中的背景颜色?

javascript - node.js express jsonp 返回类型