你好,我正在努力弄清楚如何在批处理文件中获得字符串变量的尾字符。我可以很容易地使用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循环,我也无法在for循环中工作。
IF NOT "%foobar%"=="%foobar:~=%" ( ECHO string contains ~ )发布于 2019-12-04 21:09:30
是的,您确实不能使用表达式!sub:~=!,因为这与sub-string syntax (例如,!sub:~1,1!)和sub-string syntax (例如,!sub:search=replace!)冲突。
但是,您可以使用以下子字符串替换功能!sub:*search=replace!的特殊情况,它替换了直到replace第一次出现search之前的所有内容,并包括了第一次出现的内容,因为搜索字符串随后允许以~开头。
if not "!sub!"=="!sub:*~=!" echo String contains '~'.https://stackoverflow.com/questions/59181487
复制相似问题