我目前正在使用带有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/