我在批处理文件中具有以下代码,并在其上启用了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/

10-10 11:29