gpt4 book ai didi

batch-file - 感叹号与批处理文件中的 EnableDelayedExpansion 冲突

转载 作者:行者123 更新时间:2023-12-01 13:59:04 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com