• ベストアンサー

ショートカットのURLをファイルに出力したい。

C:\WINDOWS\Favoritesには、お気に入りに登録してたもののショートカットがあります。 各ショートカットのURLをファイルに出力する事は出来るでしょうか? opendir(DIR, "C:/WINDOWS/Favorites/"); @dir_value = readdir(DIR); closedir(DIR); @file = grep(-f,@dir_value); ダメ元でやってみたのですが、ショートカットはファイルではない?のでファイル名の取得も出来ませんした。 よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

サンプルを作ってみました。 適当に変更してみて下さい ショートカットのうち 拡張子がlnkはリンクで urlがURLのリンクです。 ファイルの中に、 URL=アドレス の行があるので、それを見つけたら、 ファイル名と一緒に表示するというようにしてます。 -------------------------------- @files=glob("*.url"); for $file (@files){ open(FH, $file); while(<FH>){ if(/^URL=.*$/){ print $file . ":"; print ; last; } } close(FH); }

kapran
質問者

お礼

@files=glob("*.url");を@files = grep(/url/,@dir_value); で旨くいきました。表示のさせ方は私が用意して置いた力技よりスマートですね。

kapran
質問者

補足

C:/WINDOWS/Favorites/で旨くいけば、履歴のC:/WINDOWS/Historyでも行けるとふんでいました。。。 履歴の中の例えば「今日」の内容について同じ様なことは出来るでしょうか? 心当たりが御座いましたら宜しくお願いします。

その他の回答 (2)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

> C:/WINDOWS/Favorites/で旨くいけば、履歴のC:/WINDOWS/Historyでも行けるとふんでいました。。。 > 履歴の中の例えば「今日」の内容について同じ様なことは出来るでしょうか? このフォルダはFavoritesと違って仮想フォルダです。ためしにエクスプローラー以外でHistoryフォルダを調べてみてください。おそらくindex.datとかの名前のファイルが1個あるだけで、その実体はDBになっています。 なので、一番手っ取り早いプログラムからのアクセスは、IEコンポーネントとか、IUrlHistoryStgあたり使ってアクセスできます。

kapran
質問者

お礼

有り難うございました。 >なので、一番手っ取り早いプログラムからのアクセスは、IEコンポーネントとか、>IUrlHistoryStgあたり使ってアクセスできます。 それらを使うのは難しそうですのですので、研究が必要の様です。(^_^;

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

URLショートカットは、ただのテキストファイルです。 テキストファイルとして開き、 URL=http://~ という行があります。 どこかに仕様が載っていたのですが、失念しました…。 ファイル名の取得が出来なかった理由は、また別にあるような気がします。

kapran
質問者

お礼

@files = grep(/url/,@dir_value); で取得できました。有り難うございました。-f で取得できませんでしたのでパニクッてしまいました。(^_^;

関連するQ&A

  • ファイル名に『?』が入ってるファイルを開くには?

    ファイル名に半角の『?』が入ってるファイルには アクセスできないでしょうか? opendir(DIR, "./dir"); @list = grep(!/^\./, readdir(DIR)); close(DIR); ディレクトリにあるファイルのリストを取得して、 そのリストに基づいて処理をしたいのですが… ファイル名に『?』が入ってるファイルは、 open(); rename(); ファイル演算子等の処理できません。 これをなんとかする方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • CGIがある場所以外のディレクトリの内容表示方法

    ディレクトリ内にあるファイルの一覧を表示しようとしていますがうまく出来ません。 ---------------- opendir(DIR, "./"); @dir_value = readdir(DIR); closedir(DIR); ---------------- この状態だともちろんですが、CGIがあるディレクトリの一覧を表示します。(この状態で、表示する部分のプログラム(ソース?)が間違っていないことはわかります) この1つ下(同ディレクトリ内に「img」ディレクトリ作成)の内容を表示したいのですが、うまく出来ません。 単純に、 ---------------- opendir(DIR, "./img"); @dir_value = readdir(DIR); closedir(DIR); ---------------- と、してみましたがファイルを表示しません。 他にも、「./img/」または絶対パス(/home/~~)でもだめでした。 下または上のディレクトリを参照するのには上記変更だけでは出来ないのでしょうか? 方法がありましたらお願いします。

    • ベストアンサー
    • CGI
  • フォルダ内のTXTファイル一覧表示

    opendir(DIR,"./"); while($bbb=readdir(DIR)) { print "<a href=\"$bbb\">$bbb</a><br>\n"; } closedir(DIR); で、取得するファイルをTXTに限定したいと思っています。 どのように追加すればいいかご存知の方がいましたら 教えて下さい。

    • ベストアンサー
    • Perl
  • readdir()で得られるファイル・ディレクトリ情報の順番は?

    Perlプログラムにて、  opendir(DIR, '.');  @dir_list = readdir(DIR);  closedir(DIR); などとすると、そのディレクトリにあるファイルとディレクトリの一覧情報を得ることができますが、この場合、@dir_list にはどのような順番で情報が格納されるのでしょうか? readdir() 関数の仕様が知りたいです。ご存知の方、ぜひ教えてください。

    • ベストアンサー
    • Perl
  • readdirでのファイル名取得

    readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ディレクトリ名を取得したい

    perlでディレクトリ名だけを取得したいのですが、 なかなかうまい方法が見つかりません。 ファイル名を取得する・・・というのは結構あるのですが、 ディレクトリ名だけ、というのがどうもわかりません。 ちなみにファイル名取得は以下のようにやっています。 my $md; opendir(DIR, 'q'); while (defined($dir = readdir(DIR))) { $md=substr($dir,0,6); } closedir(DIR); ディレクトリ名だけを取得・・・というのはどうやればよいのでしょうか。

    • ベストアンサー
    • Perl
  • 下のディレクトリ(3つ)に含まれる同じファイル名のテキストを結合し,カレントディレクトリに出力する

    いつもお世話になっております.環境はWindows XPのActiveperlです. やりたいことは「下のディレクトリ(3つ)に含まれる同じファイル名のテキストを結合し,カレントディレクトリに出力する」ことです.具体的にはいかのようにしたいと思っています. 現在のディレクトリ/a/1.txt a b c 現在のディレクトリ/b/1.txt d e f 現在のディレクトリ/c/1.txt g h i 現在のディレクトリ/1.txt a b c d e f g h i ここで私は以下のプログラムを作成しました. use strict; use warnings; my $dirname1 = './a/'; my $dirname2 = './b/'; my $dirname3 = './c/'; opendir(DIR1, $dirname1) or die "$dirname1: $!"; while (my $dir1 = readdir(DIR1)) { next unless (-f $dir1); next unless ($dir1 =~ /\.txt$/); opendir(DIR2, $dirname2) or die "$dirname2: $!"; while (my $dir2 = readdir(DIR2)) { next unless (-f $dir2); next unless ($dir2 =~ /\.txt$/); opendir(DIR3, $dirname3) or die "$dirname3: $!"; while (my $dir3 = readdir(DIR3)) { next unless (-f $dir3); next unless ($dir3 =~ /\.txt$/); if (($dir1 == $dir2) && ($dir2 == $dir3)){ open(FILE1, $dir1) or die "$dir1: $!"; my $line1 = <FILE1>; close(FILE1); open(FILE2, $dir2) or die "$dir2: $!"; my $line2 = <FILE2>; close(FILE2); open(FILE3, $dir3) or die "$dir3: $!"; my $line3 = <FILE3>; close(FILE3); my $joint_line = $line1.$line2.$line3; open(NEWFILE, "> $dir1") or die "$dir1: $!"; print NEWFILE $joint_line; close(NEWFILE); } } } } closedir(DIR1); closedir(DIR2); closedir(DIR3); ですが,以下のようなエラーが発生しています. closedir() attempted on invalid dirhandle DIR2 at joint.pl line 51. closedir() attempted on invalid dirhandle DIR3 at joint.pl line 52. ディレクトリハンドルが使われているけれど閉じているか実際にはディレクトリハンドルでは無い時にこれらの警告が発行されるとこの警告がでるようですが,どのようにしたら解決できるのでしょうか.よろしくお願いします.

  • C言語でのLinuxとwindows共通のファイル一覧取得

    C言語でファイル一覧を読み込む関数を使いたいのですが、 Linuxとwindowsで共通になるようにラッピングAPIを作りたいです。 環境はLinuxはGCC、windowsはVC++6です。 my_opendir()、my_readdir()、my_closedir()というAPIとして、 Linux側はそれぞれopendir()、readdir()、closedir()を 内部で呼べばいいですが、問題はwindowsです。 my_opendir()内部で_findfirst()を呼んでしまうと、 一個目のファイルが読まれてしまいます。 グローバル変数に読まれたデータを保存して、 my_readdir()時の最初の時に読み出す方法も考えたのですが、 これだとリエントラントになりません。 何かいい方法はないでしょうか?

  • ファイル名の変更

    下記はデレクトリーabcのjpg画像ファイル名を(数字.jpg) 読み込み順に(1.jpg)に変更するコードですが,エラーになります、 #!"C:\perl\bin\perl.exe" opendir(DIR,"./abc/"); # デレクトリopen @DATA = grep /\.jpe?g/i, readdir(DIR); # デレクトリread @SDATA = sort { $a cmp $b } @DATA; # ソート for ($k=0; $k<=@SDATA; $k++) { $new = $k.'.jpg'; rename ("$SDATA[$k]", "$new"); } closedir(DIR); exit; よろしくお願いします。

    • ベストアンサー
    • Perl
  • readdir におけるフルパスでのファイル名取得(1)

    前提: current directory---perl scriptが存在する data directory -----.\DATA¥ current directory直下のフォルダ"DATA"に含まれるファイル名(text file)の取得は、 ------------------------------ opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } で、できますが、フルパス付は、どのようにすればできるでしょうか? 現状、DOS promptで下記のようにやっています。 dir /s/b/o .\DATA\*.txt > filelist.dat これを、perlで読み込んで、処理をやっています。 readdirをうまく使って、perlの中で済ませてしまいたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう