ファイル名に特殊記号が含まれていて操作できない。

自分はuwscでスクリプト書いてて、gb.exeというファイルをゴミ箱に移動できるコマンドラインツールを使ってるんだが、「•」のようなANSIで表現できない記号が含まれていると、ゴミ箱へ移動できないようだった。

というわけで、UTF-8(?)で取り扱われてるっぽい文字列をANSIに変換して、問題ないファイル名を作る関数を作ってみた。

//ANSIで表現できない特殊な記号が含まれていたら、str_repに置換された文字列を返す。
//また、ファイル名に使用できない文字列が含まれていたらそれもstr_repに置換する。
function CreateSafeFileName(strFileName,str_rep="_")
	dim tmp=ENCODE(strFileName, CODE_ANSI)
	result=RemoveProhibitionCharcterforFileName(tmp,str_rep)
fend

// ファイル名に使えない、下記文字列をstr_repに置換した文字列を返す。
// \ / ? : * " > < |
function RemoveProhibitionCharcterforFileName(strFileName,str_rep="")
	result=ReplaceMatchWord(strFileName,"[\\/\?:\*<#DBL>><\|]",str_rep,true,true)
fend

//strSearchedの中で、正規表現strPatternと一致した部分を、str_replaceToに置換
//置換完了した文字列を返す。
function ReplaceMatchWord(strSearched,strPattern,str_replaceTo,flagGloval=true,flagIgnoreCase=true)
	dim re=CreateOleObj("VBScript.RegExp")
	re.pattern = strPattern //正規表現パターン。
	re.Global = flagGloval //文字列全体を検索。trueでする(規定)、falseでしない(マッチしたらそこで終了)。
	re.IgnoreCase = flagIgnoreCase //大文字・小文字を区別。trueでしない(規定)、falseでする。
	result = re.Replace(strSearched,str_replaceTo)
	re=null
fend

この、CreateSafeFileNameにファイル名として使いたい文字列を入れると、ファイル名に使えない文字列をstr_repに置換した文字列にしてくれる。やってる内容は、ENCODEでANSIに変換して、変換できなかった特殊な文字は「?」になるから、ファイル名禁止文字列の置換でまとめて置換しちゃってる。

取り合えず、FileSystemObjectで取得したファイルオブジェクトを、これで作ったファイル名にリネームすれば問題なく動くように出来た。

コメント

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

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