如何使用变量作为批处理程序中的索引对某个字符串进行子串

时间:2016-02-04 11:25:25

标签: batch-file substring

我正在尝试使用变量作为索引对某个字符串进行子串:

call :subStrFunction 0 1 test

:subStrFunction
set _startchar =%~1
set _endchar =%~2
set _stringInput=%~3

::tried with this
CALL SET subStr=!_stringInput:~%_startchar%,%_endchar%!

::and this (found on http://ss64.com/)
::CALL SET subStr=%%_stringInput:~%_startchar%,%_endchar%%%

::end this
::SET _substring=%_stringInput:~%_startchar %,%_endchar %


echo substring %subStr%

但它们都不起作用>,<

提前thx! :d

更新:已解决,添加setLocal enableDelayedExpansion

1 个答案:

答案 0 :(得分:1)

我重新编写了批处理文件,以便为子字符串功能提供1个或两个参数。

转弯值将存储在名为{str_Return}的环境变量中,并且在setlocal环境之外可见。 名为{bolReturn}的第二个环境变量将设置为{T}以获得成功结果,如果至少未提供起始位置或子字符串命令出错,则将设置为{F}。

@Echo Off
call :subStrFunction test 0 1

If "%bolReturn%" EQU "T" (
Echo %str_Return%
) Else (
Echo Command was not successful
)
pause

:subStrFunction
setLocal enableDelayedExpansion
REM String variable needs to be first
set stringInput=%~1
REM If only 1 number is given
If "%~2" EQU "" Goto :l_Missing_Param
If "%~3" EQU "" Goto :l_1_Operand

REM Start and stop parameters given
Set "str_Result=!stringInput:~%~2,%~3!"
If [%ERRORLEVEL%] NEQ [0] Goto :l_Exeuction_Error
Goto :l_Return_Value

:l_1_Operand

REM Start parameter given
Set "str_Result=!stringInput:~%~2!"
If [%ERRORLEVEL%] NEQ [0] Goto :l_Exeuction_Error
Goto :l_Return_Value

:l_Missing_Param
Echo.
Echo You did not provide the correct number of parameters

REM Set Exit value to F for an imcomplete execution
EndLocal & Set bolReturn=F
Goto :EOF

:l_Exeuction_Error
Echo.
Echo An unspecified error has occured!

REM Set Exit value to F for an imcomplete execution
EndLocal & Set bolReturn=F
Goto :EOF

:l_Return_Value
REM Store result value in stable variable
EndLocal & Set "str_Return=%str_Result%"

REM Set Exit value to T for a complete execution
Set bolReturn=T
Goto :EOF

您可以将其用作子例程或完全用于单独的批处理文件。

P.S。如果将此代码复制到您自己的批处理文件中,请确保使用的每个引用{"}是实际引用,而不是其中一个引号或批处理文件将失败。