我尝试使用此代码(效果很好):
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!是其他功能的过滤器...
我需要解决什么?
答案 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
设置了延迟变量扩展。
希望这会有所帮助!