" があると失敗します。
入力される文字列に " がある可能性があるなら、置換するコードをさらに記述する必要があります。
よほどの事情がない限り、VBScript か JavaScript を使った方が簡単です。
作成 2010.02.25
更新 2017.08.09
更新 2017.08.09
BAT ファイルで変数に特定の文字列が含まれているか確認する
既知の問題
コード1
検査対象 %VAR1% ~ %VAR4% に %SERCHTEXT% が含まれるか確認し、結果を ERRORLEVEL で取得します。
@ECHO OFF @REM テストする変数 SET VAR1=01234567890 SET VAR2=test4567890 SET VAR3=012test7890 SET VAR4=0123456test @REM 検索対象 SET SEARCHTEXT="test" ECHO %VAR1% | find %SEARCHTEXT% >NUL IF NOT ERRORLEVEL 1 (ECHO %VAR1% TRUE) ELSE (ECHO %VAR1% FALSE) ECHO %VAR2% | find %SEARCHTEXT% >NUL IF NOT ERRORLEVEL 1 (ECHO %VAR2% TRUE) ELSE (ECHO %VAR2% FALSE) ECHO %VAR3% | find %SEARCHTEXT% >NUL IF NOT ERRORLEVEL 1 (ECHO %VAR3% TRUE) ELSE (ECHO %VAR3% FALSE) ECHO %VAR4% | find %SEARCHTEXT% >NUL IF NOT ERRORLEVEL 1 (ECHO %VAR4% TRUE) ELSE (ECHO %VAR4% FALSE)
コード2
検査対象 %VAR1% ~ %VAR4% に %SERCHTEXT% が含まれるか確認し、結果を %RESULT% に格納しています。
せっかく作ったので。
せっかく作ったので。
@ECHO OFF
@REM テストする変数
SET VAR1=01234567890
SET VAR2=test4567890
SET VAR3=012test7890
SET VAR4=0123456test
@REM 検索対象
SET SERCHTEXT=test
@REM 検索対象の文字の長さ
SET SERCHLEN=4
@REM 検索結果 0:未検索 1:検索対象が含まれる -1:検索対象が含まれない
SET RESULT=0
CALL :STRCHECK %VAR1%
IF %RESULT%==1 (ECHO %VAR1% TRUE) ELSE (ECHO %VAR1% FALSE)
CALL :STRCHECK %VAR2%
IF %RESULT%==1 (ECHO %VAR2% TRUE) ELSE (ECHO %VAR2% FALSE)
CALL :STRCHECK %VAR3%
IF %RESULT%==1 (ECHO %VAR3% TRUE) ELSE (ECHO %VAR3% FALSE)
CALL :STRCHECK %VAR4%
IF %RESULT%==1 (ECHO %VAR4% TRUE) ELSE (ECHO %VAR4% FALSE)
EXIT /B
:STRCHECK
SET RESULT=0
CALL :INCHECK %1 -1
EXIT /B %RESULT%
:INCHECK
SET CHECKVAR=%1
SET /A CHECKPOINT=%2+1
CALL SET CHECKDATA=%%CHECKVAR:~%CHECKPOINT%,%SERCHLEN%%%
IF "%CHECKDATA%" EQU "%SERCHTEXT%" (
  SET RESULT=1
) ELSE (
  IF "%CHECKDATA%" EQU "" (
    SET RESULT=-1
  ) ELSE (
    CALL :INCHECK %CHECKVAR% %CHECKPOINT%
  )
)
EXIT /B %RESULT%
タグ: BAT