![](/img/trans.png)
[英]How to get the output of command executed using child_process in nodejs?
[英]NodeJS with Child_Process - How to escape my command
我目前正在將nodejs與child_process模塊一起使用。 我們正在嘗試一些奇怪的批處理。
基本上,我們只想使用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的源參數需要反斜杠,而目標參數卻需要斜杠?
我正在使用子進程模塊的spawn功能 。 看來這無法逃脫任何事情。 我試圖查看一下nodejs的代碼,但是很好……這並不容易! 生成函數會轉義命令嗎?
如果確實需要自己對命令進行轉義,那么我們也想在UNIX上執行命令。 所以我想轉義的方法是不一樣的。 而且我不想做一個
if(window) escapeshellargWindow(arg) else if(unix) escapeshellargLinux(arg)
還有其他人遇到過這類問題嗎?
不熟悉Windows,但是我猜想第一個參數中的正斜杠可能會被解析為xcopy
命令的選項。 以下任何參數都不會這樣處理,因此可以正常工作。
至於轉義,問題不是spawn
太多,而是使用\\
來轉義文字Javascript字符串的一般方法。 因此,如果使用此命令:
spawn('xcopy', [ 'C:\my\path\myfile.test', ... ])
那么這就是spawn
將會收到的(作為arguments
):
{ '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
無法確定傳遞給它的內容,因此它不會自行逃避。
我發現對參數使用正斜杠並將對文件夾邊界使用反斜杠始終有效。
例如:
xcopy / S / I / D / Y“ DRIVE:\\ Folder1 \\ Folder2”“。\\ Folder1”
希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.