クリップボード内の複数行の文字列の改行を半角スペースに置換する次のコードにはバグがあった。
@echo off
setlocal enabledelayedexpansion
rem クリップボードの内容を一時ファイルに出力する
powershell -command "Get-Clipboard" > temp.txt
rem 置換後のファイル名を指定する
set output=kaigyou-to-space.txt
rem もし置換後のファイルが存在していたら削除する
if exist %output% del %output%
rem 以下のforループで一時ファイルの内容を1行ずつ読み込み、置換処理を行う
set "alltext="
for /f "delims=" %%a in (temp.txt) do (
rem 変数lineに1行分のテキストを代入する
set "line=%%a"
rem 空行でなければ変数alltextに追加する(スペース区切り)
if not "!line!" == "" set "alltext=!alltext! !line!"
)
rem 先頭と末尾のスペースを削除する(先頭と末尾だけでなく、複数連続しているスペースも削除される)
set alltext=%alltext:~1,-1%
rem 結果をoutputファイルに出力する
echo %alltext% > %output%
rem 一時ファイルを削除する
del temp.txt
rem outputファイルの内容をクリップボードにコピーする
type %output% | clip.exe
クリップボードに「Lovely Fruit」が入っている時に検索すると「Lovely Frui」で検索されてしまった。最後の「t」が抜けてしまった。
その修正までの bing とのやり取りは次の通り。途中から。
それ以前の次のコードで「Lovely Fruit」が「Lovely Frui 」になってしまうようです。 @echo off setlocal enabledelayedexpansion rem クリップボードの内容を一時ファイルに出力する powershell -command “Get-Clipboard” > temp.txt rem 置換後のファイル名を指定する set output=kagigyou-to-space.txt rem もし置換後のファイルが存在していたら削除する if exist %output% del %output% rem 以下のforループで一時ファイルの内容を1行ずつ読み込み、置換処理を行う set “alltext=” for /f “delims=” %%a in (temp.txt) do ( rem 変数lineに1行分のテキストを代入する set “line=%%a” rem 空行でなければ変数alltextに追加する(スペース区切り) if not “!line!” == “” set “alltext=!alltext! !line!” ) rem 先頭と末尾のスペースを削除する(先頭と末尾だけでなく、複数連続しているスペースも削除される) set alltext=%alltext:~1,-1% rem 結果をoutputファイルに出力する echo %alltext% > %output% rem 一時ファイルを削除する del temp.txt rem outputファイルの内容をクリップボードにコピーする type %output% | clip.exe
このコードは、クリップボードの内容を取得し、改行をスペースに置換して、結果を再びクリップボードにコピーするものですね。ただし、「Lovely Frui」が「Lovely Frui 」になってしまう原因は、このコードからはわかりません。実際に生成されたkagigyou-to-space.txt
ファイルの内容を確認してみてください。
受信したメッセージ. このコードは、クリップボードの内容を取得し、改行をスペースに置換して、結果を再びクリップボードにコピーするものですね。ただし、「Lovely Frui」が「Lovely Frui 」になってしまう原因は、このコードからはわかりません。実際に生成された`kagigyou-to-space.txt`ファイルの内容を確認してみてください。
「Lovely Fruit」が「Lovely Frui 」になってしまうのです。最後の「t」が削除されてしまうのです。kagigyou-to-space.txt の残った文字列は「Lovely Frui 」でした。
kagigyou-to-space.txt
ファイルの内容が「Lovely Frui 」であるということは、この問題は次の行に起因する可能性があります。
set alltext=%alltext:~1,-1%
この行は、変数alltext
の先頭と末尾のスペースを削除するために使用されています。ただし、このコードでは末尾の文字も削除されてしまう可能性があります。次のように修正してみてください。
for /f "tokens=* delims= " %%a in ("%alltext%") do set alltext=%%a
この修正により、変数alltext
の先頭と末尾のスペースだけが削除されるようになります。
18行目の「set alltext=%alltext:~1,-1%」を「for /f “tokens=* delims= ” %%a in (“%alltext%”) do set alltext=%%a」に置き換えるのですね。試したら解決しました。ありがとうございました。
問題が解決して良かったです。これからもお手伝いできることがあれば、お気軽にご連絡ください。
この後、バッチファイルを修正した。
コメント