簡體   English   中英

使用Child_Process的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM