是否可以从应用程序更改windows控制台的目录?

是否可以从应用程序更改windows控制台的目录?,windows,powershell,batch-file,console,Windows,Powershell,Batch File,Console,我的目标是编写一个应用程序,让您可以快速为长目录路径分配别名并更改它们。我编写了一个应用程序,在用户的appdata目录中的一个文件中管理它们,但是我找不到一种方法来更改从我的应用程序运行程序的shell的目录。我的目标是让它在git bash、cmd.exe和powershell中工作。我想要这样的东西: cd /c/vsts/some-long-project-name-reports g -a reports 现在我有了该目录的别名“reports”。下次打开控制台时,我要做的是访问该目

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

cd /c/vsts/some-long-project-name-reports
g -a reports
现在我有了该目录的别名“reports”。下次打开控制台时,我要做的是访问该目录:

g reports
我使用的是dotnetcore,不过通过查看问题,似乎根本没有办法做到这一点。使用
Directory.SetCurrentDirectory(路径)
Environment.CurrentDirectory=path
它会更改g.exe进程的工作目录,但当它退出时,shell会在我运行命令时返回到它的工作目录

我已经为git bash提出了一个解决方案,我将我的
g
应用程序改为输出路径,并将其作为路径中的
go

OUTPUT="$(g $1)"
cd $OUTPUT
然后,我只需要使用
源代码
在当前shell中运行脚本:

. go reports
批处理文件
go.bat
不需要
源代码来工作:

for /F "tokens=*" %%i in ('g %1') do set OUTPUT=%%i
cd %OUTPUT%
我想我必须输入额外的字符,但是有没有类似的方法可以在powershell中实现这一点?

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


一般来说,正如注释中指出的,根据定义,在子进程中运行的可执行文件不能更改其父进程的工作目录。

因此,唯一的解决方案是输出目标目录的路径,并让父进程更改为该路径。

在命令提示符下键入
doskey/?
。请看我的答案这里没有“windows控制台的目录”(它是一个带有与窗口关联的输入/屏幕缓冲文件的I/O设备),因此我想您想要的是更改父进程的工作目录,特别是您列出的命令行shell。对此没有通用的解决方案。我可以推测黑客的解决方法,但您已经找到了CMD的最佳解决方案,使用批处理脚本。对于bash和PowerShell,我建议您使用函数而不是脚本来实现它。
function g { Set-Location (g.exe $args) }