Можно ли изменить каталог консоли Windows из приложения? - PullRequest
1 голос
/ 06 апреля 2019

Моя цель - написать приложение, которое позволит вам быстро назначать псевдонимы длинным путям каталогов и изменять их.Я написал приложение, которое управляет ими в файле в каталоге appdata пользователя, но я не могу найти способ изменить каталог оболочки, в которой я запускаю программу, из моего приложения.Моя цель - заставить его работать с git bash, cmd.exe и powershell.Я хочу что-то вроде этого:

cd /c/vsts/some-long-project-name-reports
g -a reports

Теперь у меня есть псевдоним «отчеты» для этого каталога.В следующий раз, когда я открою консоль, я хочу попасть в этот каталог:

g reports

Я использую ядро ​​dotnet, хотя, просматривая вопросы, кажется, что нет способа сделать это ввсе.С Directory.SetCurrentDirectory(path); или Environment.CurrentDirectory = path; он изменяет рабочий каталог процесса g.exe, но когда он выходит, оболочка возвращается в свой рабочий каталог, когда я запускаю команду.

Я пришел срешение для git bash, я изменил мое приложение g, чтобы вместо него выводить путь, и теперь в моем пути это go:

OUTPUT="$(g $1)"
cd $OUTPUT

Тогда мне просто нужно использовать . или source чтобы запустить скрипт в текущей оболочке:

. go reports

И пакетный файл go.bat не требует . или source для работы:

for /F "tokens=*" %%i in ('g %1') do set OUTPUT=%%i
cd %OUTPUT%

Iдумаю, мне придется смириться с набором дополнительных символов, но есть ли подобный способ сделать это с powershell?

1 Ответ

1 голос
/ 06 апреля 2019

Определить функцию оболочки в PowerShell (при условии, что g.exe выводит целевой путь):

function g { Set-Location (g.exe $args) }

Как правило, eryksun указывает в комментарии, что исполняемый файл, который по определению запускается в дочернем процессе , не может изменить свой рабочий каталог parent process '.
Следовательно,Единственное решение - вывести путь к целевому каталогу и позволить ему изменить родительский процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...