从文件中提取字符串的批处理脚本
我查找了一些字符串操作例程,并且知道我可以在其他几种语言中这样做,但为了简单起见,我希望它在批处理文件中。从文件中提取字符串的批处理脚本
我希望它搜索一个标签的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()功能在蝙蝠...
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是不是你应该做的。
+1,因为那是一块不可读的聪明。 – 2010-12-11 21:44:18
@Camilo:什么?不可读?这可能是我写的批处理代码更可读的一部分:-)。我同意,虽然“strLength”并不尽如人意,但直接来自OP。 – Joey 2010-12-11 22:00:01
辉煌的乔伊:)明天会考验,但它看起来不错。 – 2010-12-12 12:18:17
这不会像JS片段那么简单,它是否被写入蝙蝠。 – user502515 2010-12-10 10:41:48
是的,我发现... – 2010-12-10 10:45:51
我个人的建议是:与批量伪语言相比,您会花更少的时间写甚至是C(!)。 – 2010-12-11 21:42:53