0

バッチでループを使用して、複数のビデオ カード入力で ffmpeg を実行するスクリプトを生成しようとしています。これまでのところ、私は持っています:

これは、次のことをしようとする場合を除いて、うまく機能しています:

set /a cam=%%cいつc="08"またはc="09"。私は得る:

無効な番号。数値定数は、10 進数 (17)、16 進数 (0x11)、または 8 進数 (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

parkydrは、エラーが発生する理由について正しい診断を提供しました。接頭辞が付いた数字0は8進数として解釈されます。

簡単な解決策があります。右側をに変更し08、比較の両側に非数値文字を追加して、数値比較の代わりに文字列比較を強制します。値はすべて同じ長さになるようにゼロが埋め込まれているため、文字列として適切に並べ替えられます。私は引用符を使用するのが好きですが、ほとんどすべての文字で使用できます。

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

編集

上記の解決策は、whenisまたは。の失敗に直接対処するものではありませSET /Aん。上記の私の解決策は、オプションが削除されていることを前提としています。%%c0809/A

cam変数は完全に削除できます。

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

さらに良いことに、IFは08無効な8進表記と見なし、デフォルトで文字列比較を行うため、余分な数字以外の文字は必要ありません。

if %%c leq 08 ...

詳細については、CMD.EXEが数値を解析する方法のルールを参照してください。IFステートメント専用のセクションがあります。

于 2013-02-07T11:38:08.577 に答える
2

先頭にゼロがある数値は 8 進数 (0x は 16 進数を示す) として解釈されるため、08 と 09 は不適切な 8 進数値です。

于 2013-02-07T11:24:03.220 に答える