0

我正在尝试通过批量使用循环来生成一个脚本以在多个视频卡输入上运行 ffmpeg。到目前为止,我有:

除了尝试执行以下操作外,这很好用:

set /a cam=%%cc="08"c="09"。我得到:

无效号码。数字常量可以是十进制 (17)、十六进制 (0x11) 或八进制 (021)。

是什么赋予了?这是代码:

@echo off
setlocal enabledelayedexpansion

for %%c in (01 02 03 04 05 06 07 08 09 10 11) do (
  set /a cam=%%c
  if !cam! leq 8 (
    echo foobar_sd%%c
  ) else (
    echo barfoo_hd%%c
  )
  pause
)
4

2 回答 2

2

带有前导零的数字被解释为八进制(如 0x 表示十六进制),因此 08 和 09 是错误的八进制值。

于 2013-02-07T11:24:03.220 回答
2

parkydr 提供了有关您收到错误原因的正确诊断 - 前缀为的数字0被解释为八进制。

有一个简单的解决方案 - 将右侧更改为08并在比较的两侧添加一个非数字字符以强制进行字符串比较而不是数字比较。这些值作为字符串正确排序,因为它们都被零填充以具有相同的长度。我喜欢使用引号,但几乎任何字符都可以。

if "!cam!" leq "08" ...

编辑

上面的解决方案并没有直接解决SET /Awhen %%cis0809. 我上面的解决方案假定该/A选项已被删除。

cam变量可以完全消除:

if "%%c" leq "08" ...

更好的是,不需要额外的非数字字符,因为 IF08视为无效的八进制表示法并默认为字符串比较。

if %%c leq 08 ...

有关更多信息,请参阅CMD.EXE 如何解析数字的规则。有一个部分专门介绍 IF 语句。

于 2013-02-07T11:38:08.577 回答