強制改行されたリンク異常URLにアクセスするバッチファイル
最近のメールソフトは記載されているURLをクリックするだけで、ブラウザを起動してそのURLのページを表示してくれる。HTML形式ではなくテキスト形式で送られてきたメールでさえ、リンクを張ってくれている。だから、記載されたURLをコピーしてブラウザを起動してブラウザのアドレスバーに貼り付けて表示する手間が省ける。
しかし、クリックして起動するのは既定のブラウザ(通常はIE)で、Firefoxなど既定のブラウザとは異なるブラウザで見たい場合には、記載されたURLをコピーしてブラウザを起動してブラウザのアドレスバーに貼り付けて表示する必要がある。それが面倒なので、【ネット上の辞書サービスをテキストエディタから使う方法】に書いたことを応用して、URLをクリップボードにコピーしたらショートカットキーを押すだけで望みのブラウザが起動してコピーしたURLのページを表示してくれるバッチファイルを作った。
一部のメールソフトでは、お節介にも長いURLを強制的に改行してくれて、親切にリンクしてくれるのは最初の一行だけという、役に立たない仕様がある。送信側のソフトが強制改行する場合もあるし、受信側のソフトが強制改行されているURLを繋げてリンクを作成しない場合がある。ちなみにSo-netのWebメールは後者だろう。Thunderbirdは後者に近く、URLを繋げるがリンクは一行目に記載されていた分だけである。そのような場合に、メールソフトに記載されたURLをコピーしてショートカットキーを押すだけで望みのブラウザが起動してコピーしたURLのページを表示してくれるバッチファイルは役に立つ……と思ったのだが……、私が最初に作った単純なバッチファイルでは改行されたURLを一行に繋いでくれなかった。
最近のブラウザは便利で、例えば次のように強制改行されているURLがあっても、改行されたままコピーしてブラウザのアドレスバーに貼り付けると、ちゃんと繋げて目的のページを表示してくれる。
http://www.google.co.jp/search?hl=ja&source=hp&
q=%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88&
btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=
だから通常は改行コードを削除する作業は必要ない。
しかし、私の場合は改行コードを削除する必要が生じた。テキストエディタを使えば簡単に削除できるが、テキストエディタを起動するくらいなら、ブラウザを起動してブラウザのアドレスバーに貼り付けたほうが早い。私の場合はバッチファイルを使って改行コードを削除したかった。
Googleで検索して探したのだが、なかなか良い方法が見つからず、やっと次の情報を見つけた。
質問
DOSプロンプトの質問
DOSプロンプトについて質問です。
Windows2000を使用しています。
とあるテキストファイル内の改行全てを削除したいのですが、
そういったことが出来るコマンドはないでしょうか?
調べていくと、for文がそれに近いことが出来るのではないかと思ったのですが、
for文の構成を理解できず、行き詰まってます。。。
例) abc
def
ghi
jkl
↓
abcdefghijkl
(DOSプロンプトの質問 - 教えて!goo)回答
一部の特殊記号が含まれていると駄目ですが、大抵は下記で出来ます。
set TEXT=
for /f "delims=" %%A in (filename.txt) do call :sub "%%A"
>filename.out echo %TEXT%
goto :eof
:sub
set TEXT=%TEXT%%~1
goto :eof
ただし、変数に詰め込むことになるので、長さの上限があるかもしれません。
途中だけでなく最後の改行も取るなら、
>filename.out echo %TEXT%
を
>filename.out set /p =%TEXT%<NUL
に
なかなか良さそうだったので、少し変えて早速試したのだが、「一部の特殊記号が含まれていると駄目です」で躓いた。上記のサンプルURLでは次のようになった。
http://www.google.co.jp/search?hl=jaq=83682E32E338btnG=Google+A4CB4A2
たくさんの文字が消えている。「&」や「%」が影響しているようである。
どうやら、callで飛ばす前は大丈夫だが、サブルーチン「:sub」で受け取る時に消えているらしい。
そこで、サブルーチンに飛ばす前に「&」や「%」を消えない文字に変換して、返って来てから元に戻そうと思ったのだが、文字を置換する方法で躓いた。環境変数中の文字列は「%[環境変数]:[置換元文字列]=[置換先文字列]%」とすることで置換できるらしく(参照)、「&」については実際に試したら成功した。しかし、「%」ができない。Googleで探したのだが、見つけられなかった。
ここで、MS-DOSコマンドだけで処理するのは諦めて、フリーウェアを探すことにした。コマンドプロンプトで動作するソフトでなければならない。どうやら、【XTR for Win32】が良さそうである。使い方(オプションなど)は「XTRNT.EXE」をコマンドプロンプトにドラッグ&ドロップしてキーボードの「Enter」を押せば表示される。
それで、結局、クリップボードにコピーしたURLのページをFirefoxで表示するバッチファイルは次のようになった。
cd "C:\Documents and Settings\(ユーザー名)\My Documents"
cliputil.exe -paste > clip_temp0.txt
XTRNT.EXE -f -nz -kf clip_temp0.txt > clip_temp1.txt
for /f "delims=" %%A in (clip_temp1.txt) do set AA=%%A
start "" "C:\Program Files\Mozilla Firefox\firefox.exe" "%AA%"
DEL clip_temp?.txt
exit
「cliputil.exe」と「XTRNT.EXE」は実際はフルパス(フルパスの確認方法はたくさんあるが、テキストエディタにコピーするのならcliputil.exeにドラッグ&ドロップするのが楽)で書いてある。一行目はいらないが「clip_temp0.txt」と「clip_temp1.txt」がアクセスしやすい所に作られるように入れておいた。頻繁に使うので削除する必要がないから「DEL clip_temp?.txt」も不要である。「XTRNT.EXE」の三行目は次の四行目の「clip_temp1.txt」の所に「''」で囲んで書いてまとめることができる。
最後には削除するテキストファイルを最低でも一つは一時的に作らせなければいけないバッチファイルであることが残念だが、もっとスマートな方法が見つかるまでは、このバッチファイルを使おうと思っている。記載されているURLが「http://」で始まってなくてリンクが張られていない場合や、上記のようにURLが強制改行されて自動リンクが異常になっている場合や、他にもURLが「()」で囲まれて後ろの「)」がリンクに含まれたり、文章中のURLが後ろの長い文章をリンクに含めてしまったり、リンクに異常が生じている場合に役立っている。
コメント 0