7/9 .bat(バッチ)でindexOf
7/9 .bat(バッチ)でindexOf |
突発的にこんにちわ!
今日はお仕事中にバッチスクリプトを作っていて必要になり、しかしググっても見つからなかった機能<文字位置検索(javaでいうindexOf)>を頑張って作ったので公開してみるテスト。
以下.batの中身です。
以下、実行結果。
コマンドプロンプトはいまいち習熟度が低いので変な文法使ってるかも知れないですけど気にしないでね!
一部参考にしたページ。
Windowsバッチファイル(.bat)、文字数を取得する
今日はお仕事中にバッチスクリプトを作っていて必要になり、しかしググっても見つからなかった機能<文字位置検索(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)、文字数を取得する