Прежде всего: call
здесь будет бесполезен, так как вы, очевидно, пишете командный файл, а сценарии PowerShell не связаны для их запуска по умолчанию. call
для пакетных файлов или подпрограмм.
Во-вторых, любой скрипт PowerShell, который вы вызываете из командного файла , не может изменить переменные среды среды вызывающей стороны. Это фундаментальное свойство поведения процессов, и поскольку вы вызываете другой процесс, это никогда не сработает.
Я не совсем уверен, почему вы вообще используете здесь командный файл, если у вас есть PowerShell. С тем же успехом вы можете полностью решить эту проблему в PowerShell.
Однако, что я понял из вашей проблемы, так это то, что лучший способ решить эту проблему, вероятно, заключается в следующем: Создайте два пакетных файла, каждый из которых задает PATH соответствующим образом. Вероятно, вы можете не указывать пути MSSQL и Sybase из вашего обычного PATH и добавлять их только в командные файлы. Затем создайте ярлыки для
cmd /k set_mssql_path.cmd
и
cmd /k set_sybase_path.cmd
, каждый из которых теперь является ярлыком оболочки для работы с инструментами соответствующей базы данных. Вот как работает командная строка Visual Studio, и это, вероятно, самое чистое решение, которое у вас есть. Вы можете использовать команды color
и prompt
в этих пакетах, чтобы выделить две разные оболочки, чтобы вы всегда знали, какая у вас среда. Например, следующие две строки раскрасят консоль белым на синий и установят подсказку, указывающую MSSQL:
color 1f
prompt MSSQL$S$P$G
На самом деле это может быть очень удобно.
Как правило, попытка перестановки переменной среды PATH не совсем легка. Хотя вы можете тривиально разделить на ;
, это не удастся для путей, которые сами содержат точку с запятой (и которые должны быть заключены в кавычки). Даже в PowerShell на это уйдет некоторое время, поэтому я думаю, что создание ярлыков, специфичных для этих инструментов, вероятно, самый хороший способ справиться с этим.