大津です。

Node の spawn() 
の問題というより、単なるJavaScriptの文字列指定の問題なんですが、「\文字列」はエスケープシーケンスとして認識されるので、パス中の
\をJavaScriptの文字列で利用するなら \\ と書かないといけません。

なので、

var command = 'C:\\cmd\\std.bat';

と書いたらたぶんうまく動くでしょう。

一度 command 変数を console.log() などで確認されたらよいかと思います。


(2013/05/19 18:52), 竹内佑介 wrote:
> お世話になっています、竹内です。
> 
> 
> Wdinwos版node.jsでspawn()に実行させるコマンドをフルパスで与えた場合に、
> 以下のようなエラーが出てしまいコマンドが実行されませんでした。
> 
> { [Error: spawn ENOENT] code: 'ENOENT', errno: 'ENOENT', syscall: 'spawn' }
> 
> このプログラムはnode.jsからspawn()を使用して、
> 外部コマンドであるstd.batの呼び出しを実行するものです。
> 
> 
> 
> 〜node.jsのソースコード〜
> var child_process = require('child_process');
> 
> var command = 'C:\cmd\std.bat';
> var args = [];
> var options = {
>      'cwd' : 'C:\\cmd\\'
> };
> 
> var child = child_process.spawn(command,args,options);
> 
> child.stdout.setEncoding('utf8');
> child.stdout.on('data' , function(data) {
>      console.log('stdout : ' + data);
> });
> 
> child.on('exit', function(code) {
>      console.log('child process done width ' + code);
> });
> 
> child.on('error', function(err) {
>      console.log(err);
> });
> 
> child.stderr.setEncoding('utf8');
> child.stderr.on('data' , function(data) {
>      concole.log('std err : '+data);
> });
> 
> 
> 〜std.bat〜
> @echo off
> echo test
> 
> 
> 
> 
> node.jsのソースコードと同じ階層にstd.batを置いて相対パスで指定した場合は外部コマンド呼び出しに成功しましたが、
> これをフルパスで指定するとエラー出てしまいます。
> エラーコードである「ENOENT」を調べてみると、指定されたファイルおよびディレクトリがないという意味なので、
> おそらくパス指定の問題なのではと考えています。
> 
> 基本的な質問になってしまうのですが、
> Windows版spawn()の実行コマンドにフルパスを指定する方法について教えて頂けないでしょうか。
> 
> -- 
> 
> ---
> このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、[email protected] にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
> 
> 

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、[email protected] にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。


メールによる返信