是否可以通过应用更改Windows控制台的目录?

时间:2019-04-05 21:53:15

标签: windows powershell batch-file console

我的目标是编写一个应用程序,使您可以快速将别名分配给长目录路径并对其进行更改。我写了一个应用程序来管理它们,该应用程序位于用户的appdata目录中的文件中,但找不到从我的应用程序中运行程序的shell目录更改方法。我的目标是让它从git bash,cmd.exe和powershell运行。我想要这样的东西:

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

现在,该目录具有别名“ reports”。下次打开控制台时,我想要进入的目录是:

g reports

我正在使用dotnet core,尽管仔细研究问题似乎根本没有办法做到。使用Directory.SetCurrentDirectory(path);Environment.CurrentDirectory = path;可以更改g.exe进程的工作目录,但是当它退出时,当我运行命令时,shell返回到它的工作目录。

我想出了一个git bash解决方案,我将g应用更改为输出路径,并将其作为go放置在路径中:

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

然后,我只需要使用.source在当前shell中运行脚本即可:

. go reports

批处理文件go.bat不需要.source即可工作:

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

我想我必须忍受键入额外的字符,但是使用powershell可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

在PowerShell中定义包装函数(假设g.exe 输出目标路径):

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

通常,eryksun在评论中指出,可执行文件-根据定义在子进程中运行-不能更改其进程的工作目录。
因此,唯一的解决方案是输出目标目录的路径,并让父进程更改它。