AIに"伝える"って、難しくて面白い — 「しっぽ.bat」ができるまで
Geminiにお願いして書いてもらった「ファイル名末尾一括リネーム」のコード。目的の処理は成功したけれど、末尾の文字を編集したい場合、コードの修正がちょっと面倒だってわかった。で、さっそくまたこんなお願いをGeminiにしてみた。
「末尾につけたい文字を、ダイアログボックスで聞いてくれないかな?」
Geminiは簡単にコードを書いてくれた。もう慣れた操作だ。バッチファイルをメモ帳で開いてコードを貼り付け、上書き保存。ダブルクリックして実行。
末尾の文字を尋ねるダイアログボックスが出現する。初期値は _R7・8 となっているが自由に編集できた。試しに _テスト と入力し、OK。
変わった!Gemini、お見事!!
でもでも。ここであっさりと終了しなかった。試しにほかのフォルダで実行したところ、PDF以外の画像ファイルやExcelファイルはリネームされなかった。
めげずにGeminiへ聞く。
「PDFファイル以外変わらないよ?」
「それはPDFが指定されているからです」
そう。私がサンプルとしてGeminiに見せたファイルはPDFばかりだった。だからGeminiはPDF限定のコードを書いてくれた。
再びGeminiへ送る。
「いいかんじ!でも
バッチファイルそのまま
元ファイルそのまま
新たに作ったファイルだけリネームしたい」
そしてやっとやっと求めていた形が完成する。このコードだ。
完成したコード「しっぽ.bat」(クリックで開く)
@echo off
chcp 65001 >nul
cd /d "%~dp0"
for /f "delims=" %%a in ('powershell -NoProfile -ExecutionPolicy Bypass -Command "[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') | Out-Null; [Microsoft.VisualBasic.Interaction]::InputBox('末尾に追加したい文字を入力してください。', '一括リネーム', '_R7・8')"') do set "ADD_TEXT=%%a"
if "%ADD_TEXT%"=="" exit
powershell -NoProfile -ExecutionPolicy Bypass -Command "$add = $env:ADD_TEXT; Get-ChildItem -File | Where-Object { $_.Extension -notmatch '^\.(bat|cmd)$' } | ForEach-Object { if ($_.BaseName -notlike ('*' + $add)) { Copy-Item -LiteralPath $_.FullName -Destination ($_.BaseName + $add + $_.Extension) } }"
Geminiは最後にこう付け加えた。「すでに末尾に指定した文字が付いているファイルは二重にコピーされない安全仕様になっています」
さっそく実行し、問題なく実行されたことを確認する。
バッチファイル➡そのまま
元のファイル➡そのまま
リネームしたいファイル➡コピーされ末尾に指定の文字が入る
やっとできたー!
今回も学びの多い作業だった。
- AIは指示された作業をする
- AIは渡された情報から、AIなりに条件を補う
- 大事なのはいかに自分のやりたいことをプロンプトに盛り込めるか
頭ではわかっていてもなかなか難しい。言っているつもりでも言っていないことがある。言っていないのに伝わってしまうことがある。
今回の作業では、難しいコードの編集は得意じゃないって言っていなかったからコードの編集があるツールを作ってくれたし、言っていないけど気を利かせてPDFだけ対象にしてくれていた。
自分以外に何かを伝えるのって本当に難しい。AIも、もちろん人間も。
けど、だからこそ楽しい!と思った。
そして、ちょっとずつだけど、自分も成長しているよね、と前向きに考えながら、ふいにこのコード(バッチファイル)につける名前を思いつく。これならきっとしばらく使う機会がなくても、どんな処理をするかすぐに思い出せそうな気がする。
ファイル名の末尾を変えるから——「しっぽ.bat」