Я регулярно работаю в интерактивном режиме с пакетным скриптом, который я не могу легко изменить. Одной из функций этого скрипта является вспомогательное средство навигации - он понимает правила компоновки кода моей компании / продукта и использует эти знания для преобразования "theScript cdTestCode" в «cd / DC:\The\Inferred\Path\To\The\Unit». \Tests "для компонента, каталог которого я сейчас нахожусь. Это отличная маленькая экономия времени.
Я хотел бы иметь возможность использовать этот сценарий из интерактивной среды PowerShell. Для большинства его функций просто вызов сценария из PowerShell работает отлично. Но для этой функции навигации изменение каталога, которое она выполняет, влияет только на среду cmd, в которой PowerShell запускает пакетный сценарий. Каталог окружающего хоста PowerShell не изменился, что означает, что он не очень полезен для меня, когда я пытаюсь использовать PowerShell в качестве своей оболочки.
Итак, мой вопрос: если я не могу изменить пакетный сценарий (и что я не хочу переписывать его как сценарий PowerShell), есть ли хороший способ распространения окончательного рабочего каталога пакетного сценария обратно на хост PowerShell? по завершении пакетного сценария? То есть есть ли достаточно простое средство написания функции:
function InvokeBatchScriptAndAssumeDirectory($BatchScriptFullName) {
# ...
}
такой, что
PS> pwd
Path
----
C:\elsewhere
PS> echo .\mybatchscript.cmd
@ECHO OFF
cd /D C:\
PS> InvokeBatchScriptAndAssumeDirectory .\mybatchscript.cmd
PS> pwd
Path
----
C:\
Этот вопрос очень похож, но "решение", которое оно предлагает, - просто изменить командный файл в сценарий .ps1. Пакетный скрипт, с которым я работаю, очень сложен - выполнение этого потребовало бы значительной переписки, которую я предпочел бы избежать.