No.1~3までのコマンドスクリプトは遅延環境変数を使用して
(参照する場合、
%変数名%ではなく
!変数名!)
スクリプトを展開して実行していましたが、問題があることがわかりました。
それは、格納する文字列にエクスクラメーションマーク
"!"があると
それが削除されてしまうというものです。
ファイル名に
"SHUFFLE!~"というもので実行したときに判明しました。
まあ考えてみれば変数の参照に
"!"マークを使うのだから仕方がないのかも
しれませんが、これではファイル名に
"!"を使えなくなってしまします。
この問題は遅延環境変数が有効になっている間は、
%変数名%を使っている
個所でも同じことが言えます。
誰かこの問題を避ける有効な手段を知りませんか?
と、グチだけ言ってても始まらないので、遅延環境変数を使わないように
以前のスクリプトを書き換えてみました。
| --- AACenc.cmd --- |
|
@echo off
setlocal
rem *** dstdirに出力先を設定する。設定しない場合はsrcと同じフォルダとなる ***
rem set dstdir=%temp%
rem ----------------------------
set dstdir=z:
set default=-vbr normal
set aacencdir=%SystemDrive%\bin\sound\Nero Frontends
rem *************************************************************************
if "%~1" == "" goto usage
set n=1
if "%~2" neq "" (set p1=%~1& shift& set /a n+=1)
if "%~2" neq "" (set p2=%~1& shift& set /a n+=1)
if "%~2" neq "" (set p3=%~1& shift& set /a n+=1)
if "%~2" neq "" (set p4=%~1& shift& set /a n+=1)
if "%~2" neq "" (set p5=%~1& shift& set /a n+=1)
:param_skip
if "%~2" neq "" (shift& set /a n+=1& goto param_skip)
set vbr=
set apend=
if %n% == 1 (
set vbr=%default%
) else (
if "%p1%" equ "160" (set vbr=-cbr %p1%)
if "%p1%" equ "128" (set vbr=-cbr %p1%)
)
if "%vbr%" == "" (
set vbr=-vbr %p1%
)
if "%vbr%" neq "%default%" (set apend=_%p1%)
set opt=%p2% %p3% %p4% %p5%
set src=%~1
if "%~x1" == "" (set src=%~dpn1.wav)
if not defined dstdir (set dstdir=%~dp1)
if %dstdir:~-1% neq \ (set dstdir=%dstdir%\)
set dst=%dstdir%%~n1%apend%.mp4
:execute
set path=%CommonProgramFiles%\Ahead\AudioPlugins;%path%
pushd %aacencdir%
echo on
aacenc32 %vbr% %opt% "%src%" "%dst%"
@echo off
popd
goto end
:usage
echo.
echo usage : %0 [vbr [opt-list...]] wavfile
echo vbr : 128 ^| 160
echo ^| internet ^| streaming ^| normal
echo ^| extream ^| audiophile ^| transcoding
echo (default normal)
echo opt-list : others parameter-list
echo wavfile : [drv:\][path]filename[.ext]
echo.
:end
pause
endlocal
|
| --- vfr.cmd --- |
|
@echo off
setlocal
rem *******************************************
set vfrpath=%SystemDrive%\bin\bin\vfrout
set auoenc="%SystemDrive%\bin\bin\auoenc.exe"
set dstdir=
set cfg=
set targetcmd=source
rem *******************************************
if "%~1" == "" goto :eof
set p1=
set p2=
set p3=
set p4=
set p5=
if "%~2" neq "" (set cfg=%~1& shift)
if "%~2" neq "" (set dstdir=%~1& shift)
:skip_param
if "%~2" neq "" (shift& goto skip_param)
for /f "delims=" %%i in ('findstr /i "^[^#]*%targetcmd%" %1') do (
set src=%%i
)
set src=%src:"=%
for /f "tokens=1-5 delims=,()" %%i in ("%src%") do (
set src1=%%~i
set src2=%%~j
set src3=%%~k
set src4=%%~l
set src5=%%~m
)
set n=0
if defined src5 (set /a n+=1)
if defined src4 (set /a n+=1)
if defined src3 (set /a n+=1)
if defined src2 (set /a n+=1)
if defined src1 (set /a n+=1)
if %n% equ 0 goto nohit
if "%src1:.avi=%" neq "%src1%" (set src=%src1%& goto hit)
if "%src1:.d2v=%" neq "%src1%" (set src=%src1%& goto hit)
if "%src1:.vcf=%" neq "%src1%" (set src=%src1%& goto hit)
if %n% equ 1 goto nohit
if "%src2:.avi=%" neq "%src2%" (set src=%src2%& goto hit)
if "%src2:.d2v=%" neq "%src2%" (set src=%src2%& goto hit)
if "%src2:.vcf=%" neq "%src2%" (set src=%src2%& goto hit)
if %n% equ 2 goto nohit
if "%src3:.avi=%" neq "%src3%" (set src=%src3%& goto hit)
if "%src3:.d2v=%" neq "%src3%" (set src=%src3%& goto hit)
if "%src3:.vcf=%" neq "%src3%" (set src=%src3%& goto hit)
if %n% equ 3 goto nohit
if "%src4:.avi=%" neq "%src4%" (set src=%src4%& goto hit)
if "%src4:.d2v=%" neq "%src4%" (set src=%src4%& goto hit)
if "%src4:.vcf=%" neq "%src4%" (set src=%src4%& goto hit)
if %n% equ 4 goto nohit
if "%src5:.avi=%" neq "%src5%" (set src=%src5%& goto hit)
if "%src5:.d2v=%" neq "%src5%" (set src=%src5%& goto hit)
if "%src5:.vcf=%" neq "%src5%" (set src=%src5%& goto hit)
:nohit
echo %src1%
echo %src2%
echo %src3%
echo %src4%
echo %src5%
echo ファイル名を特定できませんでした
goto end
:hit
set src=%src:"=%
:delspace_loop
if "%src:~0,1%" == " " (set src=%src:~1%& goto delspace_loop)
for /f "delims=" %%i in ("%src%") do (
if not defined dstdir (set dstdir=%%~dpi)
set dst=%%~ni.avi
)
set dstdir=%dstdir:"=%
if %dstdir:~-1% neq \ (set dstdir=%dstdir%\)
if not exist %dstdir% (echo 出力先フォルダが存在しません^("%dstdir%"^)& goto end)
set dst=%dstdir%%dst%
if exist "%dst%" (
echo 出力ファイル"%dst%"が既に存在します
set /p yn=上書きしますか?^(Y/N^)
) else (
goto execute
)
if /i "%yn%" == "y" (goto execute)
goto :eof
:execute
@echo on
%auoenc% "%vfrpath%\exavi_vfr.auo" "%vfrpath%\vfr%cfg%.cfg" "%1" "%dst%" 0
@echo off
:end
pause
endlocal
|