録画したファイルの処理で...
SET OUTDIR=C:\out\ SET OUTNAME=%~n1.mp4 encode.exe %1 "%OUTDIR%%OUTNAME%"
みたいなとことしていたところに、引数で「"c:\src\a&b.ts"」のような"&"が入ったファイル名が渡されたら...
SET OUTNAME=a&b.mp4
となってしまう。これは実際には
SET OUTNAME=a
のあとに
b.mp4
が実行されてしまうから、期待通りに動かない。
これを解決するために "" で囲めばいいじゃんと思ったりする。
SET OUTNAME="%~n1.mp4"
これでうまくいきそうにみえるけど、実際はこんな感じに "" がへんなところに入って残念なことに。
encode.exe "c:\src\a&b.ts" "c:\out\"a&b.mp4""
で、やり方を変えた。こんな感じに。
CALL :ENCODE %1 "c:\out\" GOTO :EOF :ENCODE encode.exe %1 "%~dp2%~n1.mp4" GOTO :EOF
CALLを使うとパラメータが %1〜9 でアクセスできて、CALLされた側でも %~dpn1 みたいな処理が書けるから便利。
今月から & で困ってる人が多いかもと思って日記に(笑)
前にも書いたけど %~1 とか %~dp2 とかの意味は CALL /? で簡単に調べられる。おすすめ。