我正在尝试编写一个简单的批处理文件。
“encoded _ %% A _ %% B_%int%%conv% %% E”是必需的输出文件名。有人能告诉我,为什么“int”和“conv”从未出现在名字中?它对待他们就像他们不存在一样......为什么?
FOR %%A IN (4k, 8k) DO FOR %%B IN (7, 8) DO FOR %%C IN (1/32, 1/4) DO FOR %%D IN (2/3, 5/6) DO FOR %%E IN (4, 64) DO (
if %%C==1/32 (set int=132) else (set int=14)
if %%D==2/3 (set conv=23) else (set conv=56)
dvbtenco -i zad1.m2v -o encoded_%%A_%%B_%int%_%conv%_%%E -m %%A -M %%E -p %%D -D %%C -b %%B -d t
timeout /t 10
)
答案 0 :(得分:1)
npocmaka在他的评论中有明显的解决方案 - 使用延迟扩展。
但是有一个不太明显的解决方案可以避免延迟扩张。所需要的只是两个FOR循环。
/
在处理路径时通常(但不总是)与\
同义,因此1/32\..
在逻辑上等同于1
。您可以使用~n
修饰符来获取FOR变量中包含的规范化名称,而不使用路径。
FOR %%A IN (4k, 8k) DO FOR %%B IN (7, 8) DO FOR %%C IN (1/32, 1/4) DO FOR %%D IN (2/3, 5/6) DO FOR %%E IN (4, 64) DO (
for %%c in (%%C\..) do for %%d in (%%D\..) do (
dvbtenco -i zad1.m2v -o encoded_%%A_%%B_%%~nc%%~nC_%%~nd%%~nD_%%E -m %%A -M %%E -p %%D -D %%C -b %%B -d t
)
timeout /t 10
)