Variables 可变子串辅助
以下是我的文件片段:Variables 可变子串辅助,variables,batch-file,substring,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=%ch
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
或者沿着这些线,而不是应该从原始输入中分离出来的数字或字母
谢谢你的帮助
这是完整的文件,如果您需要它:您应该在脚本开始时启用延迟扩展,并使用
代码>代替周围的%
符号
setLocal enableDelayedExpansion
set checkSub=!_input:~%checkVal%,1!
set parContents=!_input=:~%_startPar%,%_endPar%!
注意,您设置了两次checkSub
变量,两次都完全相同,所以我没有包含两次。有三行需要更改,还有一行需要添加。这是当var未定义时,如果尝试执行类似于设置val=%var:~1,4%
的操作时将获得的值。如果变量未定义,子字符串和搜索/替换操作将无法正常工作,而是在冒号后返回指令。这正是您的情况,因为您的最终赋值在表达式中有一个不需要的=
你有:
call set parContents=%%_input=:~%_startPar%,%_endPar%%%
因此,它希望从名为\u input=
的变量中提取一个子字符串,该变量不可能存在-用户定义的变量名不能包含=
通过删除=
call set parContents=%%_input:~%_startPar%,%_endPar%%%
。。。。
:结束括号
设置/a\u endPar=%checkVal%-%\u startPar%
通话:inpar%\u startPar%\u endPar%
回显括号:%ParContent%
:没有
后藤:EOF
:inpar
调用集parContents=%%\u输入:~%1,%2%
后藤:eof
这对我很有效…似乎是一行使用了我没有在这里发布的&
的代码导致了这个问题。很抱歉给您添麻烦。检查子部分工作正常。唯一不正常的部分是在parContents的末尾。打开echo并在设置parContents后添加暂停,然后查看它将变量设置为什么。在echo关闭的情况下,命令是call set parContents=%\u输入:~1,4%
我明白我最初被延迟的原因了(我没有注意到这个电话,现在我知道扩展是如何工作的了,对不起),但我不明白为什么变量没有正确展开。请使用我建议的方法尝试一下,看看是否有效。不幸的是,如果您说或类似的话,您得到的输出就是~1,4
,还是%\u输入:~1,4%
?@我得到的输出是~1,4
因为我给出的输入是(test)
,您想让我显示整个文件吗?它只长几行。我在文章的底部链接了整个文件。所有内容都已定义。@Aty'ai-是的,但您的变量名在赋值中错误,因此没有定义!我已更新了答案。“用户定义的变量名不能包含=”。set var^==test
-echo%var=%
-test
;)@Unclesmeat-创建名为var
的变量,其值为=test
。您可以整天尝试,但使用纯批处理无法成功创建名为=
的变量。不,您的原始代码在子字符串扩展中有一个不需要的=
。请参阅我的更新版本answer@dbenham我更新了完整的文件现在一切顺利。