检查变量中是否包含子字符串-同一行中的命令(cmd / c)

时间:2018-12-03 19:05:28

标签: variables cmd prompt

我尝试使用此代码(效果很好):

setlocal enabledelayedexpansion & set "WP=(wordA) (wordB) (wordC)" & set "WN=wordBB"
IF NOT "!WP:(%WN%)=!"=="!WP!" (echo found) ELSE (echo Not found)

但这不起作用(用于vbscript):

cmd /v /c "setlocal enabledelayedexpansion & set "WP=(wordA) (wordB) (wordC)" & set "WN=wordBB" & IF NOT "!WP:(%WN%)=!"=="!WP!" (echo found) ELSE (echo Not found)"

我在做什么错了?

编辑:

在我的情况下,这是一个更好的示例:

cmd /v:on /c "@echo off & set "WP=(v0) (v2) (v6) (v4)" & (for %a in (v1 v2 v3 v4) do set "WN=%a" & if not \"!WP:(%WN%)=!\"==\"!WP!\" (echo Found %a) else (echo not %a) ) & pause"

我需要使用!WN!变量以!WP!中搜索字符串(我不能直接使用%a,因为!WN!是其他功能的过滤器...

我需要解决什么?

1 个答案:

答案 0 :(得分:0)

您需要使用反斜杠(")对内部双引号(\)进行转义。请检查批处理文件here中的转义字符。

除了上面的语法cmd /v [...]是错误的。 cmd /v:on将打开延迟变量扩展,而cmd /v:off将其关闭。请在新的cmd中键入cmd /?,以获取更多信息。

因此,在这些之后,您必须修改命令,因此它将如下所示:

cmd /v:on /c "set \"WP=(wordA) (wordB) (wordC)\" & set \"WN=wordB\" & if not \"!WP:(%WN%)=!\"==\"!WP!\" (echo found) else (echo Not found)"

由于不需要setlocal enabledelayedexpansion命令,因此删除了该命令,因为如上所述,在cmd中使用cmd /v:on设置了延迟变量扩展。

希望这会有所帮助!