我正在尝试使用变量作为索引对某个字符串进行子串:
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
答案 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。如果将此代码复制到您自己的批处理文件中,请确保使用的每个引用{"}是实际引用,而不是其中一个引号或批处理文件将失败。