クリップボード内の文字列でGoogle検索するバッチファイル

 クリップボード内の文字列でGoogle検索をする自作バッチファイルのコードを Edge Copilot の bing に修正してもらった。

次のコードを修正して。

@echo off
for /f “delims=” %%A in (‘C:\Programs\cliputil\cliputil.exe -paste’) do set AA=%%A
if %aa:~0,4%==http (
start “” “firefox.exe” -profile “C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp” “%AA%”
) else (
start “” “firefox.exe” -profile “C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp” “https://www.google.co.jp/search?q=%AA%&hl=ja”
)
exit

 次のような返事があった。

次のコードを修正してという課題について、プロフェッショナルなスタイルで中段落を書くとしたら、以下のような文章になるかもしれません。

このコードは、クリップボードにコピーしたテキストがhttpで始まる場合はそのURLを開き、そうでない場合はGoogleで検索するという機能を持っています。しかし、このコードにはいくつかの問題点があります。まず、変数名がわかりにくいです。AAという変数名では何を表しているのか分かりません。もっと具体的な名前に変えるべきです。例えば、clip_textやurl_textなどです。次に、firefox.exeのパスがハードコーディングされています。これでは他の環境では動作しません。firefox.exeのパスを環境変数や設定ファイルから読み込むようにするべきです。また、プロファイルのパスも同様です。さらに、Googleで検索する際に日本語の文字列をそのまま渡していますが、これでは正しく検索できません。URLエンコーディングを行う必要があります。最後に、exitコマンドは不要です。バッチファイルは最後まで実行されたら自動的に終了します。

以上の問題点を踏まえて、次のようにコードを修正しました。

 修正されたコードは次の通り。

プレビュー

“`batch
@echo off
rem クリップボードからテキストを取得
for /f “delims=” %%A in (‘C:\Programs\cliputil\cliputil.exe -paste’) do set clip_text=%%A

rem firefox.exeのパスを環境変数から取得
set firefox_path=%FIREFOX_PATH%

rem プロファイルのパスを設定ファイルから取得
set profile_path=
for /f “tokens=2 delims==” %%B in (profile.ini) do set profile_path=%%B

rem テキストがhttpで始まる場合はそのURLを開く
if %clip_text:~0,4%==http (
start “” “%firefox_path%” -profile “%profile_path%” “%clip_text%”
) else (
rem テキストがhttpで始まらない場合はGoogleで検索する
rem URLエンコーディングを行う
setlocal enabledelayedexpansion
set url_text=%clip_text%
for %%C in (” =+ ” ^” =%%22 ” & =%%26 ” ‘ =%%27 ” ( =%%28 ” ) =%%29 “) do (
call set url_text=%%url_text:%%~C%%
)
endlocal & set url_text=%url_text%

start “” “%firefox_path%” -profile “%profile_path%” “https://www.google.co.jp/search?q=%url_text%&hl=ja”
)
“`
“`

この中段落では、

– コードの目的や機能を説明する。
– コードの問題点や改善点を指摘する。
– コードの修正内容や理由を示す。

という流れで書かれており、プロフェッショナルなスタイルと言えます 。

: How to Write in Japanese — A Beginner’s Guide to Japanese Writing https://www.fluentin3months.com/japanese-writing/
: How To Write In Japanese – A Beginner’s Guide https://storylearning.com/learn/japanese/japanese-tips/how-to

 「@echo off」から「/search?q=%url_text%&hl=ja”)」までをコピーして試したけれど、動作しなかった。
 実は知りたかったのはURLエンコーディングなので、次のようなコードで試してみたが、動作しなかった。

@echo off
for /f "delims=" %%A in ('C:\Programs\cliputil\cliputil.exe -paste') do set clip_text=%%A
if %clip_text:~0,4%==http (
  start "" "firefox.exe" -profile "C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp" "%clip_text%"
) else (
  rem URLエンコーディングを行う
  setlocal enabledelayedexpansion
  set url_text=%clip_text%
  for %%C in (" =+ " ^" =%%22 " & =%%26 " ' =%%27 " ( =%%28 " ) =%%29 ") do (
  call set url_text=%%url_text:%%~C%%
  )
  endlocal & set url_text=%url_text%
  start "" "firefox.exe" -profile "C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp" "https://www.google.co.jp/search?q=%url_text%&hl=ja"
) 
exit

 仕方ないので、URLエンコーディングは諦めて、アドバイスの「変数名がわかりにくいです。AAという変数名では何を表しているのか分かりません。もっと具体的な名前に変えるべきです」だけ守って、次のようなコードにした。

@echo off
for /f "delims=" %%A in ('C:\Programs\cliputil\cliputil.exe -paste') do set clip_text=%%A
if %clip_text:~0,4%==http (
  start "" "firefox.exe" -profile "C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp" "%clip_text%"
) else (
  start "" "firefox.exe" -profile "C:\Users\user\Documents\Firefox_Profiles\08dvqk7w.default_xp" "https://www.google.co.jp/search?q=%clip_text%&hl=ja"
) 
exit

 修正が必要だと思ったのは、クリップボード内の文字列が、次のように改行と空白行を含む文字列では動作しなかったから。

水樹奈々

BE READY!

 改行と空白行に問題があるのかもしれないと思い、「BE READY!」だけで試したけれど動作しなかった。「BE」だけなら動作する。「READY!」だけなら動作する。次の文字列でも動作した。

水樹奈々

BE

 ただし、検索されたのは「BE」だけである。だから、改行を削除して半角スペースに置換する必要がある。改行を半角スペースに置換する方法は分からなかったが、そもそも cliputil.exe は最後の行しか取得してないようなので、改行を半角スペースに置換する方法が見つかっても役に立たない。

 ちなみに、次の文字列ならば検索できる。

水樹奈々 BE READY!
水樹奈々 BE READY!
水樹奈々 BE READY!

 次の文字列だと動作しない。

BE READY!

 原因は分からないが、cliputil.exe の仕様かもしれない。

 次のページは、クリップボード内の文字列の改行を半角スペースに変換してGoogle検索するソース。

 ただし、まだバグがある。最初はバグがあった。次の文字列で試したらバグが発覚。

水樹奈々

Lovely Fruit

 検索された文字列は次の通り。原因不明。

水樹奈々 Lovely Frui

 bing のチャットに修正してもらった。そのやり取りは4ページに。

コメント

タイトルとURLをコピーしました