2015-03-02 147 views
0

我正在嘗試使一個函數在其他字符串中找到一個字符子字符串。我無法讓它工作。 (SET「_gf = _ strif:!!!!〜_CF,1)行不起作用批處理文件在字符串中找到子字符串

注:下面寫的功能爲工作修正版:

@ECHO off 
setlocal enabledelayedexpansion 

SET "_stri=abcdefghij" 
SET "_strf=c" 
SET "_s=0" 
CALL :instr %_stri%, %_strf%, %_s% 
echo Found at %_result%. position >> fun.txt 
goto :eof 

:instr 
SETLOCAL 
SET "_strif=%1" 
SET "_strff=%2" 
SET "_sf=%3" 
SET "_cf=" 
SET "_gf=" 
FOR /L %%a IN (%_sf%,1,10) DO (
    SET "_cf=%%a" 
    SET "_gf=!_strif:~%%a,1!" 
    IF "!_gf!"=="!_strff!" GOTO ENDF 
) 
:ENDF 
ENDLOCAL & SET "_result=%_cf%" 

回答

0
SET "_gf=!_strif!:~!_cf!,1 
     ^......^ ^...^ Variable start and end as seen by the parser 

更好地利用

SET "_gf=!_strif:~%%a,1!" 
+0

好的,這條線現在工作,「if」行也起作用,但函數不返回任何東西,「_cf」變量取了「2」(我在ECHO之後用「:ENDF」檢查過)但不返回。 – 2015-03-02 12:09:13

+0

@kitapmitap,當然,你有'en dlocal'放棄對變量的更改,而'!_cf!'使用延遲擴展,直到執行'set'(不在解析時間)纔會被訪問,變量中沒有值。使用'ENDLOCAL&SET「_result =%_ cf%」'。這樣,該變量將被解析時的值替換。此外,只有在找到角色時才應更改'_cf'。 – 2015-03-02 12:18:27

+0

謝謝。現在它起作用並返回位置。但我仍然不能理解之間的區別!和%。 – 2015-03-02 12:46:08

相關問題