perlでdialogのフォルダ指定

このQ&Aのポイント
  • perlにてプログラムを作成中で、ダイアログを使ってフォルダを指定したいです。
  • 参考ページを調べた結果、vbsをperlに埋め込むことができるようです。
  • しかし、作成したプログラムは動作せず、問題がどこにあるのかを教えていただきたいです。
回答を見る
  • ベストアンサー

perlでdialogのフォルダ指定

perl勉強中のものです。 perlにてプログラムを作成中ですが、フォルダを ダイアログを使って指定したいです。 参考ページを調べvbsにて以下のプログラムを作ってみました。 ****************************************************************** Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1, "c:\\") if objFolder is Nothing then Msgbox("ちゃんと選んで頂戴!") else Msgbox(objFolder.Items.Item.Path) end if ****************************************************************** 理解しきれていないのですが、vbsをperlに埋め込む?(変換?)ことができるようで モジュールを使って、上記のプログラムから参考を調べ、見よう見まねでperlで 作ってみましたが、何も表示せず、動作しません。 どこに問題があるか教えていただけないでしょうか? ****************************************************************** use Win32::OLE; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $objFolder = $Shell->BrowseForFolder(0,'フォルダを選択してね', 1, 'c:\\' ); unless ($objFolder) { $Shell->MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); } else { $Shell->MsgBox("$objFolder->$Items->$Item->$Path"); } ******************************************************************* とんちんかんなプログラムを作っているかもしれませんが、 ご指導よろしくお願いします。

  • dogu7
  • お礼率36% (4/11)
  • Perl
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

ちゃんと期待通り動くのに訂正します。 ------------------------------------------------------------------ use Win32::OLE; use Win32::GUI; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $Desig = Win32::GUI; my $Folder = $Desig->BrowseForFolder(-title =>'フォルダを選択してね', -directory =>"c:\\" ); unless ($Folder) { Win32::MsgBox('ちゃんと選んで頂戴!'); }else{ Win32::MsgBox("$Folder"); } ------------------------------------------------------------------ VBSとまったく同じというわけには行かないので各PerlモジュールのリファレンスとVBSのリファレンスとを照らし合わせていじってみましょう。 例: http://search.cpan.org/~robertmay/Win32-GUI-1.06/ http://perl-win32-gui.sourceforge.net/cgi-bin/docs.cgi?doc=reference-methods http://cpansearch.perl.org/src/ACALPINI/Win32-GUI-0.0.558/docs/html/Win32_GUI.html

dogu7
質問者

お礼

色々プログラムを変更していたら、回答が遅れました。 動作、表示確認です。 おかげで解決しました。 ありがとうございました。 リファレンス系は日本語はないんですねぇ・・・。 他のプログラムの追記については、訳しながら勉強してきたいと思います。 それでは。

その他の回答 (2)

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

これではだめですか? ----------------------------------------------------------------------------------------------------------- use Win32::OLE; use Win32::GUI; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $Desig = Win32::GUI; my $objFolder = $Desig->BrowseForFolder(0,'フォルダを選択してね', 1, "c:\\" ); unless ($objFolder) { Win32::MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); }else{ Win32::MsgBox("$objFolder->$Items->$Item->$Path"); } -----------------------------------------------------------------------------------------------------------

dogu7
質問者

補足

回答ありがとうございます。 試してみたところ("$objFolder->$Items->$Item->$Path"辺りで エラーが出たので、どうせ渡すので print $objFolder で、確認表示だけにしようと思います。 しかし Win32::MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); が、うまく動かないのと、 「フォルダを選択してね」 辺りの表示がうまく行きませんね?? 更に勉強してみます。

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.1

Win32::GUIやWin32::MsgBoxのメソッドっぽいですね。>BrowseForFolder, MsgBox 恐らくダブルクリックで実行しているのではないかと思いますが、 エラー(動かない原因)の確認が出来ないので、コマンドプロンプトから実行しましょう。 本当にvbsをperlに埋め込むのなら、以下の一行でも済みます。 `C:/Docume~1/username/デスクトップ/your.vbs`; # 空白を含まないように(WinXPの例)。 ``で囲むと、そのOSで使えるコマンドを実行できます。 例)print `ipconfig`; Windowsの操作なら、本家であるvbsを使う方がラクでしょう。 遊びながら学ぶなら、個人的にはWWW::Mechanizeが(簡単ではないけど)面白いです。

dogu7
質問者

お礼

回答ありがとうございます。 一応、コマンドラインからやってます。 なるほど、直接埋め込めるんですね。 プログラムは一つにしたいのですから、今回は使用しませんが 次回挑戦してみます。 WWW::Mechanizeは初耳です。 ぐぐってきまーすw

関連するQ&A

  • VBScriptでフォルダ参照ダイアログを表示したい

    HTMLファイルの中にVBScriptを記述しています。 内容はボタンが押されたら、フォルダ参照のダイアログ ボックスを表示したいのです。 開発環境は windows2000 IE6.02 スクリプトのところは以下のように記述しています。 Function Getfolder() Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) if objFolder is Nothing then  Msgbox("フォルダを選択してください") else  Msgbox(objFolder.Items.Item.Path) end if End Function で、Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1) のところで「書き込みできません」のエラーが表示されてしまいます。 どのようにすればフォルダ参照のダイアログボックスを表示できるのでしょうか?

  • VBScriptでのフォルダ指定ダイアログについて

    VBSciptでの「フォルダ指定ダイアログ」について教えてください。 「フォルダ指定ダイアログ」を利用して、保存元のフォルダと保存先の フォルダを選択し、特定ファイル(*.jpg)のコピーをするツールを作っています。 下記のプログラムで、「フォルダ指定ダイアログ」が表示されるのは 確認できたのですが、選択したフォルダの階層をテキストフォームに 表示させる方法を教えてください。(書き込みできませんのエラーになります。) --------------------------------------------------------- Dim objShell Dim objFolder ' オブジェクトの生成 Set objShell = CreateObject("Shell.Application") ' フォルダ選択ダイアログを表示 Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択してください。", 0) Set objShell = Nothing --------------------------------------------------------- 以上、宜しくお願い致します。

  • VBAでフォルダの選択時のパスを指定するには?

    VBAでフォルダの選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

  • エクセルVBA、フォルダ選択時のパスを指定するには?

    VBAでフォルダを選択する時に以下のマクロを使用しています。 これを実行するとデスクトップから表示されますが、任意のフォルダから表示させることはできないでしょうか? 用途としてはある特定のフォルダ配下に複数のフォルダがあり、これを選択させたいのです。 デスクトップからですと、そのフォルダまで辿り着くのが大変です。 また誤ったフォルダを選択する危険もあります。 このShell32を使うことにこだわってはいません。 他に良い方法があれば、それでも構いません。 よろしくお願い申し上げます。 Sub Macro1() MsgBox Folder_Define("フォルダを選択してください") End Sub Function Folder_Define(msg As String) As String Dim mySh As Shell32.Shell Dim myFolder As Shell32.Folder Set mySh = CreateObject("Shell.Application") Set myFolder = mySh.BrowseForFolder(0, msg, 0) If myFolder Is Nothing Then Folder_Define = "" Else Folder_Define = myFolder.Items.Item.Path End If Set myFolder = Nothing Set mySh = Nothing End Function

  • フォルダ選択と取得したパスの表示

    どうしてもわからないのでご教授お願いします。 コマンドボタンを使用して、フォルダの選択のダイアログを表示し、選択したフォルダのパスを取得することはできたのですが、そこから取得したパスを任意のセルに表示させたいです。 どうすれば表示させることができるでしょうか。 Private Sub commandbutton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub ご教授宜しくお願いします。

  • エクセルVBAで指定フォルダ内の選択ファイル名の取得

    お世話になります。 エクセルVBA昨日から始めた初心者です。 いま、 Private Sub CommandButton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "\\hk001a24\va\data\ツール") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub というの作成したのですが、 これだとフォルダの選択しか出来ませんでした。 \\hk001a24\va\data\ツールの下にあるファイルを選択出来て、その選択したファイル名をVBA取得して保持できる ようにしたいのですが・・・ 急いでいるのでここで質問させて頂きました。 よろしくお願いします。

  • フォルダ指定ダイアログ(Excel97VBA)

    とあるサイトで、下記のようにして、フォルダを指定するダイアログを表示させるコードを見つけました。 Set objKng = CreateObject("Shell.Application") Set dirKng = objKng.BrowseForFolder(0, "フォルダを選択してください。", 0) 上記2行についてどなたか解説して頂けないでしょうか? 特に、("Shell.Application")の""内の意味・他に何ができるのか、(0,"・・・",0)のゼロが分かりません。 また、このダイアログで、IF文を使って条件分岐させるにはどうすればいいのでしょうか? 以下のような感じで作りたいのですが。 If キャンセル押下時 then Exit Sub Else 実行 End If 宜しくお願いします。

  • エクセルのデータからフォルダを作成

    エクセル選択・読み込み→フォルダ作成先指定・処理 →作成した空のフォルダを表示 という手順のプログラムです。 コモンダイアログで選んだエクセルのデータを元に、 新しいフォルダを作成したいと思っています。 エクセルには番号(一列目)、氏名(二列目)などが入っており 一人分の情報が一行目に、二人目の情報が二行目・・・という風に一行ずつに入っています。 指定した作成先に、そのエクセルで読み込んだ人数分だけ 空のフォルダを作成し、なおかつ一列目に入っていた番号を フォルダ名にしたいのですが、どうすればいいでしょうか。 途中まで作ってみましたが後が続きません。 よろしくお願いします。 Private Const BIF_RETURNONLYFSDIRS As Long = &H1 Dim objShell As New Shell Dim objFolder As Folder Private Sub Command1_Click() Set objShell = New Shell Set objFolder = objShell.BrowseForFolder(Me.hWnd, "フォルダを選択してください", BIF_RETURNONLYFSDIRS) If objFolder Is Nothing Then MsgBox "ファイルを開く作業をキャンセルします" Else End If Set objShell = Nothing End Sub

  • vbsでZIPファイルを特定のフォルダへ。その1

    http://d.hatena.ne.jp/haradago/20150402/p1 を参考に VBSでZIPファイルを特定のフォルダへ解凍しようとしているところです。 以下の記述の意味がわからないので解説お願いします。 --------------------------------------------------- '解凍するZIPファイル DIR_SOURCE = "C:\Users\a\Desktop\aaa.zip" '解凍先 DIR_DEST = "C:\Users\a\Desktop\解凍先" '定数 Const FOF_SILENT = &H04 '進捗ダイアログを表示しない。 Const FOF_NOCONFIRMATION = &H10 '上書き確認ダイアログを表示しない([すべて上書き]と同じ)。 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) '解凍 If (Not objFolder Is Nothing) Then objFolder.CopyHere FilesInZip, FOF_NOCONFIRMATION + FOF_SILENT End If msgbox "解凍がおわったよ" ----------------------------------------------------------- 上記のVBSを実行すると デスクトップ上に ある aaa.zip が 解凍先 という名のフォルダのなかに 解凍されます。 「解凍がおわったよ」というメッセージも表示されます。 なぜ動くのかがわからないです。 ------------------------------- 'オブジェクト生成 Set objShell = CreateObject("Shell.Application") Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) ----------------------------------- の意味がわかりません。  オブジェクト メソッド プロパティ の意味はなんとなく程度です。 動物にたとえるならば、   犬・・・・オブジェクト   メソッド・・・・吠える、走る    プロパティ 犬の重さ 大きさ   という感じです。 Set objShell = CreateObject("Shell.Application") の意味なんですが、 ウィンドウズパソコンに入っているソフトを使うときによく出てくるんですが そうゆうもんだと 思っとけばいいんですかね?  たとえば  Set FilesInZip = objShell.NameSpace(DIR_SOURCE).items Set objFolder = objShell.NameSpace(DIR_DEST) この2行の意味ってなんでしょうか? google で NameSpace vbs で調べてはいるんですが、 さっぱりわからないです。 最終的には  解凍.vbs ってアイコンに 解凍したいzipファイルをドロップしたら、指定するフォルダへ 解凍ファイルを放り込むスクリプトを作ろうとしてます。 

  • VBSについて

    VBSについて質問です。プログラミング初心者です。 既定フォルダ内のファイルを選択したフォルダ内にコピーするプログラムを組みたく、 色々調べながら作成してみましたが、うまくいきません。 症状として、選択したフォルダではなく、 プログラムを保存しているフォルダにコピーされてしまします。 選択したフォルダに保存するためには、どのようにすればいいでしょうか? また、下記コードがうまくいかない理由も解説もしてくださると大変助かります。 C:\strFrom ←既定のコピー元フォルダ C:\strTo  ←プログラム実行時に選択するコピー先フォルダ C:\VBS   ←プログラムを保存しているフォルダ ※ここにフォルダ名「strTo」で「strFrom」内のファイルが保存される Set objFS = CreateObject("Scripting.FileSystemObject") 'ファイルシステムオブジェクト作成 strFrom = "C:\strFrom" 'コピーするフォルダのパス Set shla = WScript.CreateObject("Shell.Application") 'Shellの呼び出し Set strTo = shla.BrowseForFolder(0, "フォルダを選択して下さい", &H1) 'パス取得 WScript.echo strTo.Items.Item.Path '取得パス確認 objFS.CopyFolder strFrom, strTo 'ファイルコピー

専門家に質問してみよう