ファイル名に=;,や全角空白を含むファイルをバッチファイルにドロップすると、ファイル名が分割される。(その4)
バッチファイル側、バッチファイル機能だけで対処します。
@echo off
setlocal enabledelayedexpansion
set cmdline=%*
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!
goto :eof
:main
rem 元のバッチファイルをここに置く
echo;%*
« IF ERRORLEVELの零判定 | トップページ | ファイル名に&を使うときは、半角空白も併せて使うべし。 »