在下面的脚本中,我调用了一个子例程,其中包含一个字符串、该字符串的子字符串的最大长度和第三个不存在的变量,以取回子字符串。
脚本应该检查具有最大子串长度的字符串之后的下一个字符是否为空格,如果是,则按该空格剪切该字符串(删除空格)并返回子字符串,并通过剪切子字符串部分来更改传递的字符串。示例:
字符串:"Hello World Bla“
substringLength: 5
CALL :get_substring string substringLength substring
=>字符串:"World Bla“(无空格),substringLength: 5(无变化),子串:"Hello”
这在没有if子句的情况下工作得很好,但是当我使用if子句时就不行了,即使我使用了延迟扩展。
以下是不带if语句的工作代码:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET string=Hello World wasserschutzpolizei
SET /A substringLength=5
CALL :get_substring string substringLength substring
ECHO !string!
ECHO !substring!
EXIT /B 0
ENDLOCAL
:get_substring
SETLOCAL ENABLEDELAYEDEXPANSION
SET "string=!%~1!"
SET "substringLength=!%2!"
SET nextChar=!string:~%substringLength%,1!
REM IF "!nextChar!"==" " (
SET substring=!string:~0,%substringLength%!
ECHO !substring!
SET /A cutSpaceCount=!substringLength!+1
SET string=!string:~%cutSpaceCount%!
ECHO !string!
ENDLOCAL & SET %1=%string% & SET %3=%substring% & EXIT /B 0
REM ) ELSE (
REM Some other case
REM )
EXIT /B 0
当我在if语句中进行注释时,这不起作用:
IF "!nextChar!"==" " (
SET substring=!string:~0,%substringLength%!
ECHO !substring!
SET /A cutSpaceCount=!substringLength!+1
SET string=!string:~%cutSpaceCount%!
ECHO !string!
ENDLOCAL & SET %1=%string% & SET %3=%substring% & EXIT /B 0
) ELSE (
REM Some other case
)
if-statement?
请注意,我的例程还应该包含一个else语句,因为问题是相同的,所以我去掉了它。
https://stackoverflow.com/questions/50574549
复制相似问题