这个Batch文件有什么问题?

时间:2015-06-06 11:52:54

标签: 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 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

)

1 个答案:

答案 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
)