7/9  .bat(バッチ)でindexOf



7/9  .bat(バッチ)でindexOf

突発的にこんにちわ!
今日はお仕事中にバッチスクリプトを作っていて必要になり、しかしググっても見つからなかった機能<文字位置検索(javaでいうindexOf)>を頑張って作ったので公開してみるテスト。

以下.batの中身です。
echo off cd %~dp0 setlocal enabledelayedexpansion set s=あいうえおかきくけこ call :indexOf %s%,こ echo %ERRORLEVEL% set start=%ERRORLEVEL% set s1=!s:~%start%,1! echo %s1% set s=abcdefg call :indexOf %s%,ef echo %ERRORLEVEL% set start=%ERRORLEVEL% set s1=!s:~%start%,2! echo %s1% pause exit @rem ================================================ @rem 以下サブルーチン部 :indexOf set len=0 set searchStrLen=0 set sIndex=0 set str=%1 @rem 検索対象の文字数を取得 :LOOP1 if not "%str%"=="" ( set str=%str:~1% set /a len=%len%+1 goto :LOOP1 ) @rem 検索ワードの文字数を取得 set searchStr=%2 :LOOP2 if not "%searchStr%"=="" ( set searchStr=%searchStr:~1% set /a searchStrLen=%searchStrLen%+1 goto :LOOP2 ) set searchStr=%2 @rem sIndexからsearchStrLen分の文字を切り出し比較をループする :LOOP3 set str=%1 set substr=!str:~%sIndex%,%searchStrLen%! rem 抽出した文字列が検索ワードと同値ならばサブルーチンを終了する if "%substr%"=="%searchStr%" ( exit /b %sIndex% ) else ( rem 開始位置を+1して再検索する set /a sIndex=%sIndex%+1 rem 残り文字数が検索ワードの文字数以下の場合はループを終了する set /a remaining=%len%-%sIndex%+0 if !remaining! leq %searchStrLen% ( exit /b -1 ) goto :LOOP3 ) exit /b -1 @rem ================================================

以下、実行結果。
9 こ 4 ef 続行するには何かキーを押してください . . .

コマンドプロンプトはいまいち習熟度が低いので変な文法使ってるかも知れないですけど気にしないでね!

一部参考にしたページ。
Windowsバッチファイル(.bat)、文字数を取得する