- 締切済み
バッチファイルでInStrRevみたいなものを
バッチファイルでInStrRev(文字列1,文字列2)擬似みたいなことをしています。 実際は、以下のURLにあるバッチファイルを動かしているのですが、ある条件 の場合、正常に動きません。 1.見つからないときは、0 にならない。 2.文字列1と文字列2が同じものの場合、無限ループする。 例えば、a.bat 12 12 3.文字列2が文字列1の先頭にある場合、無限ループする。 例えば、a.bat abcde a 正しく動かすにはどうしらよいでしょうか。 参考URL 「http://scripting.cocolog-nifty.com/blog/2008/03/instrrev12_e196.html」
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
>set x=!xx:*%yy%=! set /? に説明があります。 >環境変数の置換は、次のように拡張されます: > > %PATH:文字列 1 = 文字列 2% > >は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列 1" を >"文字列 2" に置き換えます。 >"文字列 2" に空の文字列を指定すると、展開された出力からすべての "文字列 1" >を削除することができます。 >"文字列 1" >をアスタリスクで始め、展開された出力の先頭から、文字列 1 の残りの部分 >が最初に現れるまでのすべてを一致させることもできます。 また、展開の副文字列を指定することもできます。 xx が edcba で、yy が a のとき、!xx:*%yy%=! は、!xx:*a=! となって、edcba から aで終わる文字列を削除します。この場合は空になる。 yy が c だと、!xx:*c=! となって、cで終わる文字列を削除するので、 ba が残ります。
- notnot
- ベストアンサー率47% (4900/10358)
2カ所修正。 ~~ rem r=len(x) :len set /a r=0 if "!x!"=="" goto :eof ←追加:無限ループはこれが原因 :len2 ~~ rem r=instrrev(x,y) :instrrev setlocal enabledelayedexpansion call :len ←追加 set xlen=!r! ←追加 call :rev ~~
補足
ありがとうございます。 期待通り動きと結果になりました。 もう1点教えて頂きたいのですが、 以下、抜粋ですが、3行目の「set x=!xx:*%yy%=!」は どのような動きなのでしょうか。 調べても記載内容が見つかりませんでした。 ~~ call :rev set yy=!r! set x=!xx:*%yy%=! call :len set /a zlen=r ~~
お礼
丁寧に説明していただき ありがとうございます。 勉強になります。