你好,我在尝试找出如何在批处理文件中获取字符串变量的末尾字符,但是遇到了困难。我可以使用SET subStr=!sub:~1,1!来轻松获取第一个字符,但我真正想做的只是查找字符串是否包含~,因此我尝试了一些示例,但由于我在for循环中进行操作,所以这更具有挑战性。我有一个函数可以获取字符串长度,它运行良好,但我无法弄清楚如何将变量与子命令一起使用,例如:
FOR /F %%i IN ('DIR /b "%protoDir%" *.proto 2^>NUL') DO (
:: Check and ignore tilde temp files which start or ends with ~
SET sub=%%i
call :strLen sub str
ECHO strLength=!str!
SET /A len=!str!-1
ECHO length - 1 = !len!
SET subStr2="!sub:~!len!,!len!!" <-- ERROR IS HERE
ECHO !subStr2!
SET subStr=!sub:~1,1!
IF NOT !subStr! == ~ (
IF NOT !subStr2! == ~ ( SOME CODE HERE... )
)
)
:: Function to get a strings length
:strLen
setlocal enabledelayedexpansion
:strLen_Loop
if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof
输出结果为:
strLength=26
长度 - 1 = 25
"ReceiverDiagnostics.proto lenlen",应该是 ~
我更愿意使用下面这段代码,因为它更加简单,但是即使使用 !,我也无法在 for 循环内让它工作。
IF NOT "%foobar%"=="%foobar:~=%" ( ECHO string contains ~ )
!sub:~1,1!
实际上返回的是第二个字符。无论如何,要检查一个字符串是否包含~
,你可以这样做:if not "!sub!"=="!sub:*~=!" echo String contains '~'.
(注意*
)... - aschipfl