Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 可变子串辅助_Variables_Batch File_Substring - Fatal编程技术网

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我更新了完整的文件现在一切顺利。