Variables 什么';这个批处理文件有什么问题?

Variables 什么';这个批处理文件有什么问题?,variables,batch-file,if-statement,for-loop,Variables,Batch File,If Statement,For Loop,我正在尝试编写一个简单的批处理文件 “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 in

我正在尝试编写一个简单的批处理文件

“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

)

Npcmaka在他的评论使用延迟扩展中有一个明显的解决方案

但有一个不太明显的解决方案可以避免延迟扩张。它只需要两个以上的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
)

您需要延迟扩展—不是直接回答这个问题,而是:您知道几乎所有Windows版本都支持Windows脚本主机吗?Wsh允许您使用javascript,并且可以与批处理文件一起使用。它可以是一个替代品,也可以从批处理中呼叫wsh。@npocmaka-延迟扩展帮助,谢谢。@Marged-我不知道。谢谢你的提示,我会读到的。:)我可以建议npocmaka将他的评论作为回答,Kacper接受吗?