« VBScriptからmax()やmin()などのJScriptのMathオブジェクトのメソッドやプロパティを使う。 | トップページ | ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。(その2) »

2008年4月14日 (月)

ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。

以下のバッチファイルで現象が再現できます。

call :sub a b=c;d,e
goto :eof
:sub
echo 1=%1
echo 2=%2
echo 3=%3
echo 4=%4
echo 5=%5
echo 6=%6

参考記事:「ファイル名に=;,や全角空白を使うときは、半角空白も併せて使うべし。」
http://scripting.cocolog-nifty.com/blog/2008/02/post_c740.html

回避策も、参考記事のとおりですが、他に、以下のスクリプトをバッチファイルに関連付ける方法があります。

CScript.exe "フルパス\CMD.VBS" "%1" %*

Option Explicit
Dim wShell
Dim Args
Dim Arg
Dim oExec

Set wShell=CreateObject("WScript.Shell")
Args=Array("CMD.EXE /C <CON 2>&1")
For Each Arg In WScript.Arguments
  If InStr(Arg," ") + InStr(Arg," ") Then Arg="""" & Arg & """"
  ReDim Preserve Args(UBound(Args)+1)
  Args(UBound(Args))=Arg
Next
Set oExec=wShell.Exec(Join(Args," "))
Do While Not oExec.StdOut.AtEndOfStream
  WScript.StdOut.Write oExec.StdOut.Read(1)
Loop
Do While oExec.Status=0
  WScript.Sleep 100
Loop
WScript.Quit oExec.ExitCode

« VBScriptからmax()やmin()などのJScriptのMathオブジェクトのメソッドやプロパティを使う。 | トップページ | ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。(その2) »