MDM Zinc 2.5 不具合メモ

  • 投稿日:
  • by
  • カテゴリ:

mdm.FileSystem.getFileList()
mdm.System.execUnicode()
mdm.FileSystem.saveFileUnicode()
上記関数の引数として、全角を含むパス(「デスクトップ」など)を渡すと失敗する。

execUnicode()の代替として考えたのがVBScriptを使う方法。
1)VBScriptに渡す際も全角が文字化けするので、まず全角を含むパスをescape()を使ってURLエンコードする必要がある。
2)下記のような感じでVBScriptを実行。
 mdm.System.VBScript.execute(vbScript, 'myExecFunc', escape(pathStr), '', '', '', '');
3)VBScript側では、URLデコード関数を用意しておきこれを使って、受け取ったパスをデコードする。
4)Wscript.ShellのRunを使って実行する。

VBScriptは下記のような感じで大丈夫だと思う。
//////////////////////////////////////////////////

vbScript ='Function myExecFunc(path,a2,a3,a4,a5)\n';
vbScript+='Set objFSO = CreateObject("Scripting.FileSystemObject")\n';
//対象ファイルの存在確認
vbScript+='If objFSO.FileExists(UrlDecode(path)) Then\n';
//ファイルを開く
vbScript+=' Set WSHShell=CreateObject("Wscript.Shell")\n';
vbScript+=' WSHShell.Run """" & UrlDecode(path) & """" ,1,False\n';
vbScript+=' Set WSHShell = Nothing\n';
vbScript+='End If\n';
vbScript+='End Function\n';
//URLデコード関数
vbScript+='Function UrlDecode(Source)\n';
vbScript+=' On Error Resume Next\n';
vbScript+=' sTmp=""\n';
vbScript+=' iCount = 1\n';
vbScript+=' lSrcLen=Len(Source)\n';
vbScript+=' Do Until iCount > lSrcLen\n';
vbScript+=' sChr = Mid(Source,iCount,1)\n';
vbScript+=' iCount = iCount+1\n';
vbScript+=' If sChr="+" Then\n';
vbScript+=' sChr = " "\n';
vbScript+=' ElseIf sChr="%" Then\n';
vbScript+=' sHex = Mid(Source,iCount,2)\n';
vbScript+=' iCount = iCount + 2\n';
vbScript+=' iAsc = CByte("&H" & sHex)\n';
vbScript+=' If (&H00 <= iAsc And iAsc <= &H80) Or _\n';
vbScript+=' (&HA0 <= iAsc And iAsc <= &HDF) Then\n';
vbScript+=' sChr=Chr(iAsc)\n';
vbScript+=' ElseIf (&H81 <= iAsc And iAsc <= &H9F) Or _\n';
vbScript+=' (&HE0 <= iAsc And iAsc <= &HFF) Then\n';
vbScript+=' sChr = Mid(Source,iCount,1)\n';
vbScript+=' iCount = iCount + 1\n';
vbScript+=' If sChr="%" Then\n';
vbScript+=' sHex2 = Mid(Source,iCount,2)\n';
vbScript+=' iCount = iCount + 2\n';
vbScript+=' Else\n';
vbScript+=' sHex2 = Hex(Asc(sChr))\n';
vbScript+=' If Len(sHex2) = 1 Then\n';
vbScript+=' sHex2 = "0" & sHex2\n';
vbScript+=' End If\n';
vbScript+=' End If\n';
vbScript+=' sChr=Chr(CInt("&H" & sHex & sHex2))\n';
vbScript+=' End If\n';
vbScript+=' End If\n';
vbScript+=' sTmp=sTmp & sChr\n';
vbScript+=' Loop\n';
vbScript+=' UrlDecode = sTmp\n';
vbScript+='End Function\n';