可变子串协助

时间:2014-04-24 00:39:29

标签: variables batch-file substring

这是我文件的片段:

set checkVal=0
:checkforStart
call set checkSub=%%_input:~%checkVal%,1%%
if /i %checkSub% EQU ( goto parenthesisCheck
if /i %checkSub% EQU ' goto noPar
set /a checkVal=%checkVal% + 1
goto checkforStart
:parenthesisCheck
set /a checkVal=%checkVal% + 1
set _startPar=%checkVal%
:checkforEnd
call set checkSub=%%_input:~%checkVal%,1%%
if /i %checkSub% EQU ) goto endParenthesis
if /i %checkSub% EQU ( goto parenthesisCheck
set /a checkVal=%checkVal% + 1
goto checkforEnd
:endParenthesis
set /a _endPar= %checkVal% - %_startPar%
call set parContents=%%_input=:~%_startPar%,%_endPar%%%
echo Parenthesis: %parContents%
:noPar
pause >nul
goto end

我遇到的问题是,当我尝试返回括号中的内容时,它会返回:

~1,4

沿着这些线条的东西,而不是应该与原始输入隔离的数字或字母。

感谢您的帮助。

以下是完整档案,如果您需要:https://www.dropbox.com/s/2lljcy5t7qme0nb/substring%20parenthesis%20finder.txt

4 个答案:

答案 0 :(得分:3)

如果在未定义var时尝试执行类似set val=%var:~1,4%的操作,那么这将是您获得的值。如果变量未定义,子串和搜索/替换操作将无法正常工作 - 而是在冒号后返回指令。这正是您所拥有的情况,因为您的最终作业在表达式中有一个不需要的=

你有:

call set parContents=%%_input=:~%_startPar%,%_endPar%%%

因此,它希望从名为_input=的变量中提取子字符串,该变量不可能存在 - 用户定义的变量名称不能包含=

删除=

,轻松修复
call set parContents=%%_input:~%_startPar%,%_endPar%%%

答案 1 :(得分:0)

您应该在脚本开头启用延迟展开,并使用!代替周围的%符号。

setLocal enableDelayedExpansion

set checkSub=!_input:~%checkVal%,1!

set parContents=!_input=:~%_startPar%,%_endPar%!

注意,您将checkSub变量设置了两次,两次都完全相同,所以我没有将它包括两次。您需要更改三行,并添加一行。

答案 2 :(得分:0)

....
:endParenthesis
set /a _endPar= %checkVal% - %_startPar%
CALL :inpar %_startPar% %_endPar%

echo Parenthesis: %parContents%

:noPar
GOTO :EOF
:inpar
CALL set parContents=%%_input:~%1,%2%%

GOTO :eof 

这对我有用......

答案 3 :(得分:0)

似乎使用&&的一行我没有在这里发帖导致了这个问题。抱歉,麻烦。