プロが教える店舗&オフィスのセキュリティ対策術

perlのsystem関数を使って、コマンドを実行したいのですが、
実行ファイルの引数にフォルダを指定すると、うまく動作しません。

以下のように書いています
system "実行ファイル フォルダ";

実行ファイルは .BATファイルで、
指定しているフォルダには複数のテキストファイルが入っています。
perlで書いたcgiファイルは実行ファイルと同じディレクトリにあります。
コマンドからではなく、手動でドラッグ&ドロップすると正常に動作します。
windous7でperlはActivePerlを使用しています。


引数にはフォルダを指定できないのでしょうか?
またフォルダを指定できない場合、解決策などはあるのでしょうか?

よろしくおねがいいたします。

A 回答 (2件)

> しかしブラウザに


(略)
> が表示されてしまいます。

それは、バッチファイルが出力したものでしょう。
バッチファイルが出力したものも、CGIの出力に混ざってしまいます。
Perl側で対応する場合は、
system '… > nul'
としてください。
あるいは、バッチファイル側で、1行目に
@echo off
という行を追加してもいけるかと思います。

この回答への補足

system '… > nul' と記述したところ
無事邪魔な出力を消すことができました。

mtaka2様、回答ありがとうございました!

補足日時:2011/11/30 20:22
    • good
    • 0

その対象となる「フォルダ」の実際の名前には、空白などは入っていませんか?


スペースはコマンドライン引数の区切り文字になるため、それをそのまま指定するとあるフォルダという一つの引数のはずが、分断された複数の引数と解釈されてしまいます。

そういう場合は、
system '実行ファイル "フォルダ"';
もしくは
system "実行ファイル \"フォルダ\"";
のように、ダブルクオートで括ってみてください。

(エクスプローラからドラッグドロップでフォルダやファイルなどを指定した場合なんかでは、引数には自動的にダブルクオートが付加されます)

この回答への補足

回答ありがとうございます。

system '実行ファイル フォルダ';のようにしたら動作しました!
しかしブラウザに
C:\VMwareProgram\Apache Software Foundation\Apache2.2\htdocs\lab\termmi>call localsetting.bat C:\VMwareProgram\Apache Software Foundation\Apache2.2\htdocs\lab\termmi>PATH=C:\usr\bin\; C:\VMwareProgram\Apache Software Foundation\Apache2.2\htdocs\lab\termmi>PATH=C:\VMwareProgram\Apache Software Foundation\Apache2.2\htdocs\lab\MeCab\bin\;C:\usr\bin\; C:\VMwareProgram\Apache Software
~以下似たようなものが数行~~~

が表示されてしまいます。
print文は print OUT $str;  のみのはずなのですが、

system関数の使用なのでしょうか? 

補足日時:2011/11/30 15:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!