2

文字列に、両方の文字列が変数である別の文字列が含まれているかどうかを確認したいと思います。基本的にはこのスレッドと同じですが、2つの変数があります。その解決策を取り、それを!VAR1!and !VAR2!(これらの変数はFORループ内で宣言されています)を使用して私の状況に適用しました:

if not x!VAR1:!VAR2!=!==x!VAR1! ECHO It contains !VAR2!

残念ながら、それは機能しません。どんな助けでも大歓迎です。SETLOCAL EnableDelayedExpansionまた、変数にアクセスできるように宣言しました。

どんな助けでも大歓迎です!

ありがとう!

4

4 に答える 4

4

for文字列が別の文字列内に存在するかどうかを確認するときは、ではなくループを使用するのが好きですif

for /f "delims=" %%I in ('echo !VAR1! ^| findstr /i /c:"!VAR2!"') do (
    echo !VAR1! contains !VAR2!
)

これには、大文字と小文字を区別しない一致という追加の利点があります。


ifステートメントを保持したい場合は、混乱を減らすために中間変数を試してください。

set vt=!VAR1:%VAR2%=!
if x%vt%==x%VAR1% (
    echo %VAR1% remained the same after removing %VAR2%.  %VAR1% did not contain %VAR2%
)
于 2013-02-20T16:11:13.257 に答える
4
if "!VAR1:%VAR2%=!" neq "!VAR1!" echo It contains !VAR2!
于 2013-02-20T17:15:38.177 に答える
3

これは私の意見では最も簡単な方法です。

echo %VAR1% | find /i "%VAR2%" >nul && echo %VAR2% was found!

見つからない場合はforに&&置き換えます。||

于 2013-02-20T16:54:00.540 に答える
3

Aaciniとrojoが示しているように、2つの変数、通常の内部と遅延の外部に異なる展開を使用する必要があります。

ただし、変数を設定するのと同じコードブロック内でIFを実行している可能性があります。これで、通常の拡張を使用できなくなります。解決策は、内部変数をFOR変数に転送することです。

(
  :: Some code that sets the value of var2 
  ::
  for /f "delims=" %%A in ("!var2!") do if "!var1:%%A=!" neq "!var1!" echo It contains %%A
)
于 2013-02-21T04:22:35.193 に答える