从文件中提取字符串的批处理脚本

问题描述:

我查找了一些字符串操作例程,并且知道我可以在其他几种语言中这样做,但为了简单起见,我希望它在批处理文件中。从文件中提取字符串的批处理脚本

我希望它搜索一个标签的XML文件,并从中提取所有内容到文件末尾。

所以我猜想,例如在伪的javascript:

marketIndex = str.indexOf("<Markets>"); 
length = str.length; 
marketString = str.substring(markeIndex, length-1); 
return str; 

我有蝙蝠的子功能:

:Substring 
::Substring(retVal,string,startIndex,length) 
:: extracts the substring from string starting at startIndex for the specified length 
SET string=%2% 
SET startIndex=%3% 
SET length=%4% 

if "%4" == "0" goto :noLength 
CALL SET _substring=%%string:~%startIndex%,%length%%% 
goto :substringResult 
:noLength 
CALL SET _substring=%%string:~%startIndex%%% 
:substringResult 
set "%~1=%_substring%" 
GOTO :EOF 

和字符串函数的长度:

:StrLength 
::StrLength(retVal,string) 
::returns the length of the string specified in %2 and stores it in %1 
set #=%2% 
set length=0 
:stringLengthLoop 
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop) 
::echo the string is %length% characters long! 
set "%~1=%length%" 
GOTO :EOF 

所以我想我缺少一个indexOf()功能在蝙蝠...

+0

这不会像JS片段那么简单,它是否被写入蝙蝠。 – user502515 2010-12-10 10:41:48

+0

是的,我发现... – 2010-12-10 10:45:51

+0

我个人的建议是:与批量伪语言相比,您会花更少的时间写甚至是C(!)。 – 2010-12-11 21:42:53

rem indexof result haystack needle 
:indexof 
setlocal enabledelayedexpansion enableextensions 
set result= 
set "haystack=%~2" 
call :strlength length %3 
call :strlength haylength %2 
set /a max=haylength-length 
for /l %%i in (0,1,%max%) do (
    if "!haystack:~%%i,%length%!"=="%~3" (set result=%%i&goto indexofDone) 
) 
set result=-1 
:indexofDone 
endlocal && set %~1=%result% 
goto :eof 

也提供in my SVN。请注意,我改变了strLength定义修复了一些bug:

:strlength 
setlocal enableextensions 
set "#=%~2" 
set length=0 
:stringLengthLoop 
if defined # (set "#=%#:~1%"&set /A length+=1&goto stringLengthLoop) 
endlocal && set "%~1=%length%" 
GOTO :EOF 

此外,值得注意的,这一切不会帮助你在所有与批处理文件解析XML是不是你应该做的。

+2

+1,因为那是一块不可读的聪明。 – 2010-12-11 21:44:18

+1

@Camilo:什么?不可读?这可能是我写的批处理代码更可读的一部分:-)。我同意,虽然“strLength”并不尽如人意,但直接来自OP。 – Joey 2010-12-11 22:00:01

+0

辉煌的乔伊:)明天会考验,但它看起来不错。 – 2010-12-12 12:18:17