﻿# Проблема с символами '\(' и '\)' в системной переменной PATH при использовании PVS\-Studio из Visual Studio 2008

Иногда у пользователей статического анализатора PVS\-Studio, использующих среду Visual Studio 2008, возникает следующая проблема при запуске анализа\.

Анализ не начинается, а выдаётся только одно сообщение вида: 

```cpp
\Utilities\Bin\x86";"C:\WINDOWS\system32";"C:\WINDOWS";
"C:\WINDOWS\System32\Wbem";"C:\Program. was unexpected at this time.
```

После изучения данной проблемы мы смогли установить, что такое поведение вызвано ошибкой в одном из bat файлов настройки окружения Visual Studio\. Вот этот файл:

\.\.\\Microsoft Visual Studio 9\.0\\Common7\\Tools\\vsvars32\.bat

Анализатор PVS\-Studio использует файл vsvars32\.bat для настройки окружения перед запуском препроцессора Visual C\+\+\. Оказалось, что проблема возникает из\-за нижеприведённого фрагмента файла:

```cpp
@if not "%WindowsSdkDir%" == "" (
 set "PATH=%WindowsSdkDir%bin;%PATH%"
 set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%"
 set "LIB=%WindowsSdkDir%lib;%LIB%"
)
```

Данная ошибка проявится, если переменная окружения PATH будет содержать символы '\(' и '\)', например, в неё будет включён путь до Microsoft DirectX SDK \- "C:\\Program Files\\Microsoft DirectX SDK \(August 2006\)\\Utilities\\Bin\\x86"\. Тогда выражение, следующее за оператором if

```cpp
@if not "%WindowsSdkDir%" == "" (
 set "PATH=%WindowsSdkDir%bin;%PATH%"
```

обрывается одной из закрывающих скобок в PATH, в данном случае \.\.August 2006**\),** что и приводит к рассматриваемой проблеме\.

Данную ситуацию можно разрешить 2\-мя способами:

1. Исключить из системной переменной PATH все пути, содержащие символы '\(' и '\)'\.
1. Переписать условие if, используя оператор goto, например следующим образом:

```cpp
@if "%WindowsSdkDir%" == "" goto SkipSDKVariableSet

@set "PATH=%WindowsSdkDir%bin;%PATH%"
@set "INCLUDE=%WindowsSdkDir%include;%INCLUDE%"
@set "LIB=%WindowsSdkDir%lib;%LIB%"

:SkipSDKVariableSet
```

Второе решение создаёт дополнительную проблему с установкой обновлений, которые могут переписать данный участок файла vsvars32\.bat\.