Строка проверки Windows содержит другую нерабочую

У меня есть этот командный файл, чтобы добавить переменную среды, если она не существует

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

Но его не работает и говорит, что на этот раз файл был неожиданным

Я написал на основе Пакетный файл: найдите, если подстрока находится в строке (не в файле)

Ответ 1

Как упоминалось выше, используйте замедленное расширение в основной строке и регулярное расширение в строке замены. Запустите эту партию как Admin из ярлыка или из Admin Cmd Prompt:

@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

Обратите внимание, что обновленный PATH будет перечитываться из реестра только после перезапуска Cmd. Если вам нужно использовать измененную PATH в той же партии, используйте SET вместо SETX, чтобы временно установить PATH для этого сеанса Cmd.

В аналогичной конструкции, если ваш дополнительный путь comPath установлен внутри цикла IF или FOR, вместо этого используйте call set "PATH=%%envPath:!comPath!=%%".