windowsのバッチで文字列のStartWith関数を実装したい


# 困っている事

与えられた文字列が`foo\bar`に合致していれば、`result=1`として、合致していなければ、`result=0`としたいです。  
しかし、結果がすべて`result=0`になってしまいます。

# 想定している結果（例）

[code]

    foo\bar\foo -> result = 1
    foo\bar\hoge\hoge -> result =1
    bar\foo\foo -> result = 0
    foo\foo\foo -> result = 0
    hoge\hoge -> result = 0
    
[/code]

# 環境

  * windows 7

# バッチファイル

[code]

    @echo off
    set FILE_PATH_TXT=%1
    setlocal ENABLEDELAYEDEXPANSION
    for /f %%a in (%FILE_PATH_TXT%) do (
        call :startWithSrcPkgDir %%a
        echo !result!
    )
    endlocal
    
    :startWithSrcPkgDir
    echo !%1! > nul findstr /rx ^foo\\bar.* && set result=1 || set result=0
    exit /b
    
[/code]

※ %FILE_PATH_TXT% には、`c:\hoge\hoge.txt`のようなテキストファイルが渡されます。  
※ テキストファイルの中身は

[code]

    foo\bar\foo
    foo\bar\hoge\hoge
    bar\foo\foo
    foo\foo\foo
    hoge\hoge
    
[/code]

のような形になっています。

# 参考サイト

  * <https://stackoverflow.com/questions/15707742/windows-batch-check-if-variable-starts-with-ends-with-and-contains-a-specific-s>




findstrって...文字列渡せるんですかね？

ヘルプを見る限りだと、ファイルパスやディレクトリパスを渡す仕様に見えます。  
なので、もし、任意のファイルを1行ずつ判断したければ...

1行取り出す → 一時ファイルに出力する → 一時ファイルをfindstrで評価する → 結果を出力する

を繰り返さないとダメなんではないでしょうか？

* * *

これでどうでしょ～？

[code]

    @echo off
    set FILE_PATH_TXT=%1
    setlocal ENABLEDELAYEDEXPANSION
    for /f %%a in (%FILE_PATH_TXT%) do (
        call :startWithSrcPkgDir %%a
        echo !result!
    )
    endlocal
    
    :startWithSrcPkgDir
    echo %1 | findstr /rx ^foo\\bar.* 1>nul && set result=1 || set result=0
    exit /b
    
[/code]




findstrって...文字列渡せるんですかね？

ヘルプを見る限りだと、ファイルパスやディレクトリパスを渡す仕様に見えます。  
なので、もし、任意のファイルを1行ずつ判断したければ...

1行取り出す → 一時ファイルに出力する → 一時ファイルをfindstrで評価する → 結果を出力する

を繰り返さないとダメなんではないでしょうか？

* * *

これでどうでしょ～？

[code]

    @echo off
    set FILE_PATH_TXT=%1
    setlocal ENABLEDELAYEDEXPANSION
    for /f %%a in (%FILE_PATH_TXT%) do (
        call :startWithSrcPkgDir %%a
        echo !result!
    )
    endlocal
    
    :startWithSrcPkgDir
    echo %1 | findstr /rx ^foo\\bar.* 1>nul && set result=1 || set result=0
    exit /b
    
[/code]

