我在批处理文件中具有以下代码,并在其上启用了EnableDelayedExpansion选项:
::
:: Split
::
for /F "tokens=*" %%F in ('dir /s /b *.cue') do (
pushd .
cd %%~dpF
mkdir out
cd out
:: Set input file
set inFile=
if exist "%%~dpnF.flac" (
set inFile="%%~dpnF.flac"
) else (
if exist "%%~dpnF" (
set inFile="%%~dpnF"
) else (
set inFile="%%~dpF*.flac"
)
)
shntool.exe split -f "%%F" -t %%t -o flac -m /-?':' !inFile!
echo %ERRORLEVEL%
if %ERRORLEVEL% GEQ 1 (
rmdir /q out
)
popd
)
显示的代码在当前目录中递归搜索.cue-.flac对(cd rips),并使用shntool对其进行拆分。当某个目录名称包含与EnableDelayedExpansion选项冲突的惊叹号(!),并且该惊叹号从变量扩展中消失时,就会出现问题,从而使某些对失败。
我如何修改此代码段以某种方式摆脱!inFile中的感叹号! 变量才能使其正常工作?
最佳答案
您需要从%%F
获取值,而无需延迟扩展。
只需在每个循环中切换延迟扩展模式即可。
setlocal DisableDelayedExpansion
for /F "tokens=*" %%F in ('dir /s /b *.cue') do (
set "directory=%%~dpF"
set "file=%%~dpnF"
setlocal EnableDelayedExpansion
pushd .
cd !directory!
mkdir out
cd out
:: Set input file
set inFile=
if exist "!file!.flac" (
set inFile="!file!.flac"
) else (
if exist "!file!" (
set inFile="!file!"
) else (
set inFile="!file!*.flac"
)
)
shntool.exe split -f "%%F" -t %%t -o flac -m /-?':' !inFile!
echo !ERRORLEVEL!
if !ERRORLEVEL! GEQ 1 (
rmdir /q out
)
popd
endlocal
)
关于batch-file - 批处理文件中的感叹号与EnableDelayedExpansion冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32369112/