作成 2010.02.25
更新 2017.08.09
BAT ファイルで変数に特定の文字列が含まれているか確認する
既知の問題
" があると失敗します。
入力される文字列に " がある可能性があるなら、置換するコードをさらに記述する必要があります。
よほどの事情がない限り、VBScript か JavaScript を使った方が簡単です。
コード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

©2004-2017 UPKEN IPv4