Perlでファイル名を取得し、そのファイルをエディタから開こうとしています。この時、初めsystem関数を使用していたのですが、これだと、呼び出したエディタを閉じるまで、Perlが開いたままになってしまうため、execコマンドを使用しようとしたのですが、うまく動作しません。どのようにしたらいいかお教え願います。
system関数で動作している時のスクリプトは下記の通りです。
$editor = '"C:/Program Files/Hidemaru/Hidemaru.exe" /c.txt '; #エディタの場所
$filename = 'D:/data/file.txt'; #開きたいファイルの場所
$openfile = "$editor\"$filename\"";
system("$openfile");
上記のプログラムで動作しているのですが、これを単純にexec関数へ置き換えると下記のようなエラーとなり、動作してくれません。
「>'C:/Program' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
どうやら、Program filesのスペースが問題のようなのですが、これをうまく回避する方法はありますでしょうか。
ちなみに、
exec $editor;
だけですと、エディタが起動してくれます。このため、もしかしたらファイル名のスペースだけの問題ではないのかもしれませんが、よく分かりません。皆様のご助言をよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
まったく理由はわからないんですが,
1.開きたいファイルの方から " を取り除く
2.次のようなスクリプトを作って, こいつを呼出す形にする
@%*
のどちらかだとうまくいく感じです.
あ, 手元の perl は ActivePerl 5.8.6 で, Windows XP Professional SP2 で確認しました.
perl 内部~Windows 内部のどこかがあやしいんですが, どこがあやしいかについては見当がつきません.
この回答への補足
Tacosanの1.の方法で動作すると書きましたが、確かに、動作します。ただ、これですと、system関数と同様に、なぜだか、Perlシステムは待ち状態になっているようです。ActivePerlの窓がファイルを開いている間、タスクバーに現れていました。昨日は、動作したことのうれしさの余り気がつきませんでした。
また、2.の方法は具体的には、どのように書けばいいのかお教え願えないでしょうか。
何分、初心者で申し訳ありません。
なお、私が使用している環境は、
Windows XP SP2でACtive Perl 5.8.8です。
再度、お教え願えれば幸いです。
早速の回答ありがとうございました。
試してみましたが、うまく動作しました。私もなぜ「"」を取るとうまく動作できるのか理解できません。
ただ、確実に動作しました。
ありがとうございました。
No.3
- 回答日時:
え~, exec に成功した時点で perl の実行そのものは終わっているはずです. 実際, コマンドプロンプトから perl を実行すると, exec をした時点でプロンプトに戻ります. 「コマンドプロンプト以外から実行」したら, どうなるかは知りません. やったことがないので.
ついでに 2 の方ですが, 例えば
@$%
という内容のファイルを c:\windows\do-ext.cmd という名前で作っておいて, perl のスクリプトでは
exec "c:/windows/do-ext.cmd $editor ~";
と書けばいい... と思います.
Tacosan>
そのようです。コマンドプロンプトからでしたら、うまく動作しました。どうやら、エディッタ側とのやりとりでうまくいっていないみたいです。
その辺は、今後詰めていこうと思います。この頃、急に忙しくなってしまい、ゆっくりやっていこうと思いますので、今回の質問はこれで締め切ろうと思います。
皆様、ありがとうございました。
No.1
- 回答日時:
$editor にも $filename と同じように、ダブルクオートでくくってやればいいのではないでしょうか。
早速のご回答ありがとうございます。
ご教授いただいた内容は、
$openfile = "\"editor\"\"filename\"";
exec $openfile;
といった感じでよろしいのでしょうか。
これですと、確かに、開きたいファイルfile.txtは開くのですが、もうひとつ新規のファイルも起動してしまい、意図した動作とはなりませんでした。
私の理解不足でしたら申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- Excel(エクセル) Excelを開くとエラーが出る 2 2022/10/03 16:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Cからシェルを起動し返り値をハ...
-
Net-SNMPのPerlモジュールでTra...
-
UWSCのスクリプトにラグが発生...
-
powershellで関数名を変更する...
-
VBSを利用して、IEのタブを自動...
-
シェルでsyntax errorがでてしまう
-
TeraTermマクロでの出力キャッチ
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
例外処理のフローチャートの記...
-
Excel VBA 定義されたプロージ...
-
Excel VBAでリンク切れをチェッ...
-
「デバイスは PRN を初期化でき...
-
Excel VBA 『Call』で呼び出す...
-
use lib qw(変数名);は無理?
-
モジュールの最大数はいくつな...
-
現在アクティブなフォーム名を...
-
グラフのX,Y座標を取得したい
-
【vba】フォームに書いてあ...
-
CPANモジュール取得におけるmak...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
"JScript"が見つかりません!
-
Cからシェルを起動し返り値をハ...
-
awkの処理速度を改善したい
-
VBScriptでCurrentDirectoryを...
-
Perlスクリプトで文字化けして...
-
VBSを利用して、IEのタブを自動...
-
シェルでsyntax errorがでてしまう
-
CシェルプログラミングをCygwinで?
-
[ASP]条件によってインクルード...
-
UWSCのスクリプトにラグが発生...
-
pythonスクリプトの停止方法に...
-
VBSで自動ログインについて
-
Perlのライセンス
-
perlスクリプトのブラウザURLか...
-
ADサーバにおけるログインID,PC...
-
TeraTermマクロでの出力キャッチ
-
cygwinでcshが認識されず困って...
-
vbs: オブジェクトがコレクショ...
-
PerlでUNIXのコマンドとパスワ...
-
cronでのPerlスクリプト実行
おすすめ情報