« ファイル名に&を使うときは、半角空白も併せて使うべし。 | トップページ | ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。 »

2009年2月19日 (木)

ファイル名に&を使うときは、半角空白も併せて使うべし。(その2)

複数ファイルのドロップにも対応するには、CMDCMDLINEをパーズします。

@echo off
setlocal enabledelayedexpansion
set cmdline=!cmdcmdline:*" =!
set cmdline=!cmdcmdline:~0,-1!
set fq=
set fg=
set fb=true
set cmdline2=
set n=0
if not defined cmdline goto :next
:for
  set c=!cmdline:~%n%,1!
  if not defined c goto :next
  if defined fq (
    if !c!==^" set fq=& if defined fg set cmdline2=!cmdline2!^"
  ) else (
    if !c!==^  if not defined fb (
      set fb=true
      if defined fg (
        set fg=
        set cmdline2=!cmdline2!^"
      )
    )
    if not !c!==^  if defined fb (
      set fb=
      if not !c!==^" (
        set fg=true
        set cmdline2=!cmdline2!^"
      )
    )
    if !c!==^" set fq=true& if defined fg set cmdline2=!cmdline2!^"
  )
  set cmdline2=!cmdline2!!c!
  set /a n+=1
  goto :for
:next
if defined fq set cmdline2=!cmdline2!^"& if defined fg set cmdline2=!cmdline2!^"
if defined fg set cmdline2=!cmdline2!^"
call :main !cmdline2!
exit
:main
rem 元のバッチファイルをここに置く
echo;%*
pause

« ファイル名に&を使うときは、半角空白も併せて使うべし。 | トップページ | ファイル名に%を使うと、バッチファイルにドロップしたとき、環境変数に展開される。 »