Windows检查string包含另一个不工作

如果不存在,我有这个batch file追加一个环境variables

setLocal EnableDelayedExpansion set echo off set envPath=%PATH% set comPath=";D:\Package\Libraries\Lib" if x%envPath:comPath=%==x%envPath% ( setx PATH "%PATH%;D:\Package\Libraries\Lib" /M ) pause 

但是这次不工作,说档案是意外的

我写基于batch file:查找如果子string是在string(不在文件中)

Solutions Collecting From Web of "Windows检查string包含另一个不工作"

如上面的评论所述,在主字符串中使用延迟扩展,并在替换字符串中进行常规扩展。 作为管理员从快捷方式或从管理命令提示符运行此批处理:

 @echo off setLocal EnableDelayedExpansion set "comPath=D:\Package\Libraries\Lib" set "envPath=%PATH%" & set "Separator=" if not "%envPath:~-1%" == ";" set "Separator=;" if "!envPath:%comPath%=!"=="%envPath%" ( setx PATH "%PATH%%Separator%%comPath%" /M ) timeout 5 exit /b 

请注意,只有在Cmd重新启动后,更新的PATH才会从Registry重新读取。 如果您需要在同一批次中使用修改的PATH,请使用SET而不是SETX为该Cmd会话临时设置PATH。

在一个类似的构造中,如果你的额外路径是 IF或FOR循环中call set "PATH=%%envPath:!comPath!=%%" ,请使用call set "PATH=%%envPath:!comPath!=%%"