首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理文件在for循环中获得开始和结束字符

批处理文件在for循环中获得开始和结束字符
EN

Stack Overflow用户
提问于 2019-12-04 17:16:15
回答 1查看 235关注 0票数 3

你好,我正在努力弄清楚如何在批处理文件中获得字符串变量的尾字符。我可以很容易地使用SET subStr=! sub :~1,1!获得第一个字符,但是我真正想要做的就是查找一个字符串是否包含~,所以我尝试了几个例子,但是因为我在for循环中这样做,所以它更像是一个挑战。我有一个函数来获得字符串长度,这个函数可以很好地工作,但我只是想不出如何使用子命令即。

代码语言:javascript
复制
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循环中工作。

代码语言:javascript
复制
IF NOT "%foobar%"=="%foobar:~=%" ( ECHO string contains ~ )
EN

Stack Overflow用户

回答已采纳

发布于 2019-12-04 21:09:30

是的,您确实不能使用表达式!sub:~=!,因为这与sub-string syntax (例如,!sub:~1,1!)和sub-string syntax (例如,!sub:search=replace!)冲突。

但是,您可以使用以下子字符串替换功能!sub:*search=replace!的特殊情况,它替换了直到replace第一次出现search之前的所有内容,并包括了第一次出现的内容,因为搜索字符串随后允许以~开头。

代码语言:javascript
复制
if not "!sub!"=="!sub:*~=!" echo String contains '~'.
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59181487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档