- ベストアンサー
表示中のURLなどをバッチファイルに渡す
IEコンポーネントブラウザで閲覧中のページの タイトル URL 選択中リンクのリンク先タイトル 選択中リンクのリンク先URL 選択中文字列 などを引数として、自作のバッチファイルに渡す方法を教えていただけないでしょうか。 また、渡す際の操作回数は1動作が望ましいです。 Ctrl+iなどショートカットキーを一回押す ランチャーのアイコンを一回クリック など。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>"TITLE"という名前のフォルダが作成 >"TITLE\ccc.txt"の中身は"URL"という文字列 変数の中身の参照は、% % で囲みます。 mkdir "%TITLE%" echo %URL% >> "%TITLE%\ccc.txt" にしてください。 >"delims=" >とはどういう意味なのでしょうか。 delimsの初期値は空白とタブなので、これを書かないと、タイトル中に空白があった場合、空白で区切った最初の単語だけが%%Aに入ります。実際にやってみてください。 "delims="と書くことで「区切り文字無し」となりタイトル全部が区切られずに%%Aに入ります。 >のFor Each ~ Nextループで複数のウインドウの情報を取得しようとしているようですが、ウインドウ一つだけ取得するにはどう書き換えればよろしいのでしょうか。 ウィンドウが1つしか無ければ問題ないですよね。複数あった場合、最初の1つだけ取るならIF文できますが、それが希望のウィンドウとは限らないので、この方法では無理があると思います。 アクティブなタブ、アクティブなウィンドウの検知については私がわからないだけかもしれないので、このあたりを何とかしたいなら、WSH Lab.で聞いてみて下さい。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10359)
#1です。 IEでも開いているウィンドウの情報がすべて出てきます。アクティブなウィンドウを調べるのは可能かもしれませんが、分かりません。 タブブラウザのアクティブなタブを知るのはVBSでは無理な気がします。どれがアクティブかはそのソフトの中で決まっていることなので。 WSH関係で高度な情報のあるBBSがあるので下記にURLを書いておきます。 >・それから、URL、タイトル、選択文字列がワンセットになっていますがひとつずつ渡すにはVBSをどのように記述したらよろしいのでしょうか。理解不足ですみません;。 引数を渡してそれにより出力内容を変えることも出来ますが、URL出力専用、タイトル出力専用にそれぞれ別のVBSファイルにするのも分かりやすいですね。 >・実は自作バッチファイルの方も試行錯誤の段階で、今はとりあえず下記のようなことをやろうとしています やりたいことがよくわからないのですが、もし、ウェブページのスクラップのようなことがしたいのなら、「紙2001」http://www.ki.rim.or.jp/~kami/ はどうでしょうか?もしやりたいことがちがうとしても、「そもそもの本来やりたいこと」を質問されたほうが適切な回答が得られる可能性が高いと思います。
補足
・この手の機能をWSHというんですか。結構本格的なものなんですね。参考になります。 VBSでアクティブタブを知るのは無理ですか;。 ショートカットキーからの呼び出しもそうだと思いますがこのあたりはブラウザに依存が強い内容なんでしょうかね・・・。 とりあえずタブを一つだけ開いた状態でならできそうですので試してみました。 [title.vbs] ****************** For Each window In WScript.CreateObject("Shell.Application").Windows Set document=window.document If typename(document)="HTMLDocument" Then WScript.Echo document.title End If Next ****************** [url.vbs] ****************** For Each window In WScript.CreateObject("Shell.Application").Windows Set document=window.document If typename(document)="HTMLDocument" Then WScript.Echo document.location.href End If Next ******************* [tu.bat] ******************* cscript //nologo title.vbs > file1.txt cscript //nologo url.vbs > file2.txt for /f "delims=" %%A in (file1.txt) do set TITLE=%%A for /f "delims=" %%B in (file2.txt) do set URL=%%B mkdir "TITLE" echo "URL" >> "TITLE\ccc.txt" ******************** という3つのファイルを同一フォルダ内の用意し、tu.batを実行してみました。 その結果 "TITLE"という名前のフォルダが作成 "TITLE\ccc.txt"の中身は"URL"という文字列 となりました。%%A、%%Bにいれた値(文字列)をfor文の外で利用できないのでしょうか。 それからNo1の解答のときに書いてくださったコードについて伺いたいのですが、 ・http://ykr414.com/dos/dos05.html#07 によると delimsは区切り文字セットということですが "delims=" とはどういう意味なのでしょうか。 ・set URL=%%A&goto L1 ではURLという変数に現在の%%Aの値を代入しているのではないのでしょうか。 ・For Each window ・・・ ・・・ Next のFor Each ~ Nextループで複数のウインドウの情報を取得しようとしているようですが、ウインドウ一つだけ取得するにはどう書き換えればよろしいのでしょうか。 ・紙2001やWebox、WebAutoなどWebを保存できるソフトをいろいろ使ったのですが、Webデータを自前プロキシのキャッシュとして保存する機能を持っていないものが多く、一部のJAVAアプレットなどうまく保存できないコンテンツがあるんですよね。 それで今のところはプロキシ機能を持っているWeb保存ソフトGethtnlを使っています。
- notnot
- ベストアンサー率47% (4900/10359)
IEに表示中のページで、URL、タイトル、選択中文字列であれば、vbsで、 For Each window In WScript.CreateObject("Shell.Application").Windows Set document=window.document If typename(document)="HTMLDocument" Then WScript.Echo document.location.href WScript.Echo document.title If document.selection.createRange().text="" Then WScript.Echo "(not select)" Else WScript.Echo document.selection.createRange().text End If End If Next これを、aaa.vbs 等の名前をつけて、自作バッチファイル中で、 cscript //nologo aaa.vbs > file.txt for /f "delims=" %%A in (file.txt) do set URL=%%A&goto L1 :L1 for /f "skip=1 delims=" %%A in (file.txt) do set TITLE=%%A&goto L2 :L2 for /f "skip=2 delims=" %%A in (file.txt) do set SELECTION=%%A IE画面が複数開かれていれば、画面数x3行出力されるので、それを考慮してください。また特殊文字が含まれていると、バッチ処理がエラーになるかもしれませんが、それはバッチ機能の制約です。VBSを勉強して全てVBSで書くのが良いかと思います。 >選択中リンクのリンク先タイトル これは実際に開かないと分からないと思います。 >選択中リンクのリンク先URL これはちょっと調べられませんでした。無理かなあ。 IE以外のIE系ブラウザは分かりませんが、sleipnirならスクリプトが書けるので可能かもしれません。具体的なターゲットのブラウザソフトがあるなら、そのブラウザのコミュニティで聞くほうが早いと思います。
補足
ご回答くださりありがとうございます。VBSですか・・・ ・とりあえず For Each window In ・・・・ をaaa.vbsに記述。 cscript //nologo aaa.vbs >・・・・ をaaa.batに記述。 aaa.vbsとaaa.batを同フォルダに配置。そして「ぶら。」という名のIEコンポーネントブラウザで閲覧中aaa.batを実行しました。 その結果 *********************** http://www.vector.co.jp/vpack/filearea/win/writing/other/index.html Download: Windows > 文書作成 > その他 (not select) http://www.vector.co.jp/vpack/filearea/win/business/calc/spread/index.html Download: Windows > ビジネス > 計算・表計算・グラフ > 表計算 (not select) http://www.hanshintigers.jp/team/profile/18.html 阪神タイガース公式サイト (not select) cscript //nologo aaa.vbs > file.txt for /f "delims=" %%A in (file.txt) do set URL=%%A&goto L1 :L1 for /f "skip=1 delims=" %%A in (file.txt) do set TITLE=%%A&goto L2 :L2 for /f "skip=2 delims=" %%A in (file.txt) do set SELECTION=%%A *********************** というfile.txtが作成されました。 ・結果を見ると、全てのタブのURL、タイトル、選択文字列情報を取得してしまいますが、現在アクティブになっているタブに関してのみURLなどを送るにはどうしたらよろしいのでしょうか。(IEだとアクティブになっているウインドウに対応しそうな気がするのですが) ・それから、URL、タイトル、選択文字列がワンセットになっていますがひとつずつ渡すにはVBSをどのように記述したらよろしいのでしょうか。理解不足ですみません;。 ・実は自作バッチファイルの方も試行錯誤の段階で、今はとりあえず下記のようなことをやろうとしています。(文法におかしいところがあるかもしれません・・;) %1にタイトル(または選択文字列)、%2にURL(選択中リンクのリンク先URL)を渡します。 ******************************************** if exist "C:\%1" goto Error else goto Main :Error echo "EXIST!" goto End :Main rem テンプレートフォルダを中身ごと、タイトル名のフォルダにコピー xcopy "C:\templete" "C:\%1" /I rem "C:\%1"に置いてある"test.txt"にURLと改行を追加 echo "%2\n" >> "C:\%1\test.txt" rem "C:\%1"に移動 cd "C:\%1" rem "C:\%1"にある別のバッチファイルを起動 call ght.bat rem "C:\%1"を開く C:\Windous\explorer.exe "C:\%1" goto End :End ******************************************* ・「ぶら。」にはスクリプト機能はないようですね。 SleipnirはIEコンポーネントではないですよね。乗り換える踏ん切りがつきません・・・。 http://tabbrowser.ktplan.jp/angband.html
お礼
変数の中身参照の仕方やdelimsなど、バッチプログラミングの説明までしていただき大変助かりました^^。 ありがとうございました。 アクティブなタブ、ウインドウを検出する方法か、別の方法を探してみたいと思います。