我希望我的程序能够像Set-Location
命令一样更改当前目录。所以我的程序执行,然后我在命令提示符中看到一个不同的目录。
这不起作用:
Directory.SetCurrentDirectory(Scripts);
Environment.CurrentDirectory = Scripts;
这会更改执行进程的当前目录,而不是正在执行的shell目录。
我所看到的:
PS C:\Users\Test>test.exe
PS C:\Users\Test>
我想要的是:
PS C:\Users\Test>test.exe
PS C:\Test>
是的,我是从PowerShell执行的,但我不想要PowerShell脚本,我需要我的C#应用程序为我更改shell路径,然后继续使用相同的shell。当然它也应该在cmd.exe中工作。
我想避免创建一个单独的shell,而是希望我的程序充当shell命令。如果你好奇它是一个配置管理器,它应该根据作为命令参数给出的模板名称配置脚本目录,它应该改变配置脚本目录的路径。
答案 0 :(得分:0)
您无法更改父进程的当前目录。
我多年前为cmd.exe实现了一个GUI“更改目录”实用程序,我通过使用执行我的应用程序的批处理文件来完成它,然后从应用程序编写的文件中读取并应用新的目录路径。这是因为批处理脚本在cmd.exe进程内运行,并且能够更改当前目录。我假设在PowerShell中也可以这样做。
批处理文件很简单:
@echo off
call "c:\path\to\app.exe" "%temp%\newdir.txt"
if exist "%temp%\newdir.txt" for /F "usebackq tokens=*" %%A in ("%temp%\newdir.txt") do cd /D "%%~A"