HSP | ファイル名内のスペース置換 | 「~」の文字化け

HSP | ファイル名内のスペース置換 | 「~」の文字化け

たいしたプログラムじゃないですが、ハードディスク内の古いファイルのスペースを消したかったので、自作しました。
ついでに、ファイル名の頭の「数字+スペース」は「数字+ピリオド」にするようにしました。

#include "mod_regexp.as"
#include "hspext.as"

// 
// メイン
// 
fname  = "" /* 変更前のファイル名が入る */
fname2 = "" /* 変更後のファイル名が入る */
flist  = "" /* ファイル名一覧が入る */
log    = "" /* ログ出力用 */
fcnt   = 0  /* 処理したファイル数が入る */

mesbox log, 640, 480, 0

// カレントディレクトリのファイル名一覧取得
dirlist flist, "*", 3

// 処理
notesel flist

repeat notemax
// ファイル名をひとつづつ取り出す
noteget fname, cnt

// ファイル名に " " がひとつでもあれば処理
if (instr(fname, 0, " ") + 1) { /* -1 でないとき */
// ファイル名変更
fname2 = replace(fname, "^(\\d+) ", "$1.") /* 頭の "数字 " */
fname2 = replace(fname2, " ", "_")         /* その他の " " */
fxren fname, fname2
// ログ出力
log += "\"" + fname + "\" -> \"" + fname2 + "\"\n"
objprm 0, log
// ファイル数カウント
fcnt++
}
loop

// ログ出力
log += "\n"
log += ">処理したファイル数 : " + fcnt + "\n"
log += ">終了\n"
objprm 0, log

※念のため。実行ファイルにする際には、実行ファイルと同じディレクトリなど、パスの通った場所に hspext.dll がないと 内部エラー 38 が発生します。

ログの出力、最終行が表示されるようにするとか、単純に文字列追加を行う (sendmsg / SendMessage) とか、いろいろできそうだなーとか思ったり。
あと、これは HSP の仕様っていうか、他のソフトウェアとかでもたまにあるんですけど、「~」 (波ダッシュ / 波 / 波線 / ニョロ) とかの文字がファイル名に含まれていると、ファイル名取得時に「?」に置換されてしまい、処理できなくなります。

「~」 (波ダッシュ / 波 / 波線 / ニョロ) が文字化けする理由

記号名検索してたら、たまたま文字化け理由までわかってしまった。
Windows 側の問題だった。
簡単に書くと、もともと「波ダッシュ」「全角チルダ」という、ほとんど見た目が変わらない2つの文字があり、
Windows では その両者とも「全角チルダ」で処理しようとしてしまうためにおこるらしい。
いままでに、Wikipedia から文字列コピペしたら 波線だけ文字化けする、みらいなことがよくあったが、これも同じ理由みたい…。

いやーすっきりした。
ではまたいつか~。