Loops for循环中的字符串比较?(特别是在TC中)

Loops for循环中的字符串比较?(特别是在TC中),loops,batch-file,substring,teamcity,Loops,Batch File,Substring,Teamcity,我想把一堆文件放在文件夹中,如果文件中没有Microsoft这个词,我想做些什么。 我在Teamcity工作,但除了%之外,变量应与批处理文件相同 setlocal enabledelayedexpansion for /r %%%%v in (*.dll) do ( REM Do something that cif fails changes the errorlevel echo !errorlevel! set filename = %%%%~nv echo !filename! if

我想把一堆文件放在文件夹中,如果文件中没有Microsoft这个词,我想做些什么。 我在Teamcity工作,但除了%之外,变量应与批处理文件相同

setlocal enabledelayedexpansion

for /r %%%%v in (*.dll) do (
REM Do something that cif fails changes the errorlevel
echo !errorlevel!
set filename = %%%%~nv
echo !filename!
if !filename:Microsoft!==!filename! (
if !errorlevel! neq 0 goto :error
)
)
当我回显errorlevel时,我得到了正确的结果,但是文件名echo不工作,这意味着我没有正确设置它。当然,比较是没有意义的(它永远不会进入if块)


我做错了什么?

所以我只需要对我的问题发表评论,谢谢! 在任何情况下,如果其他任何人遇到这种情况,下面是有效的代码:

setlocal enabledelayedexpansion

for /r %%%%v in (*.dll) do (
set filename=%%%%~nv
REM Do something that if fails changes the errorlevel
if !errorlevel! neq 0 if /i "!filename:Microsoft=!"=="!filename!"  (
 goto :error
)
)

请注意,在使用错误级别之前,请注意不要做任何可能改变错误级别的事情,包括回显错误…

删除
SET
命令中的空格。新手犯的错误。你想用第一个
IF
命令做什么?比较应该是
IF/i“!filename:Microsoft=!”==“!filename!”(
在if命令中,我正在尝试处理不包含字符串MicrosoftOk的文件。LotPings修复了您的代码。您确实意识到使用
GOTO
命令将打破
for
命令。使用
for/F
命令解析
DIR
命令的输出可能更好,该命令将通过管道传输到
FIND
命令。
FOR/F“delims=“%%G in('dir/a-d/b/s*.dll^ FIND/I/V“microsoft”)执行……。