0

別のプロセスを開始する前に、さまざまな引数を受け取るバッチスクリプトを作成しています。以下の例では、最初の引数が1で、2番目の引数が「0〜9の任意の数字の後に、文字k、m、またはgが続く」の形式である場合を確認しています(私はプロセスが開始する必要のあるメモリの量、つまり10g = 10 Gbメモリ)。

番号が必要な場合は、これで十分です。

IF [%1] EQU [1] ECHO %2|findstr /r "[^0-9]" > nul
IF [%1] EQU [1] IF errorlevel 1 echo starting test number %1 with %2 of memory

私が考えたのは、文字k、m、またはgを追加するための明白なセグウェイであり、これに私を導きました(私は「*」の有無にかかわらず試しました):

IF [%1] EQU [1] ECHO %2|findstr /r "[^0-9]*[kmg]" > nul
IF [%1] EQU [1] IF errorlevel 1 echo starting test number %1 with %2 of memory

ただし、このFINDSTRパターンに文字列を一致させることができませんでした。基本的に、[0-9] [0-9]*[kmg]に一致するFINDSTRを探しています。私は近くにいるとかなり確信していますが、正しい構文を理解するのに問題があります。

4

1 に答える 1

2

投稿した最初のコードでさえ機能しません。[^0-9]数字以外を探します。^[0-9]これは、数字で始まる任意の文字列を意味します。あなたのロジックも間違っています: FINDSTR は、見つかった場合は errorlevel を 0 に設定し、見つからない場合は 1 に設定します。私は、IF の代わりに条件演算子&&と演算子を使用して結果をテストすることを好みます。||

あなたが試みていることについては、次のことをお勧めします。/I大文字と小文字を区別しないようにスイッチを入れました。/Xサフィックス付きの数字の前後に余分な文字がある場合、文字列が一致しないようにスイッチを追加します。

@echo off
if "%~1" equ "1" echo(%~2|findstr /rix "[0-9][0-9]*[kgm]" >nul && (
  echo starting test number %~1 with %~2 of memory
)

?残念ながら、FINDSTR はメタ文字をサポートしていません。そのため、サフィックスがオプションの場合 (バイト、キロバイト、メガバイト、およびギガバイトをサポートする場合)、ソリューションは少し複雑になります。接尾辞がある文字列とない文字列の 2 つの文字列のいずれかを検索する必要があります。FINDSTR は、検索文字列をスペースで複数の検索文字列に分割します。

@echo off
if "%~1" equ "1" echo(%~2|findstr /rix "[0-9][0-9]*[kgm] [0-9][0-9]*" >nul && (
  echo starting test number %~1 with %~2 of memory
)
于 2012-12-18T15:49:56.277 に答える