将位置更改为快捷方式位置

Change location to shortcut location

我正在使用 powershell 快捷方式启动脚本 (C:\Windows...\powershell.exe -file 'D:\powershell\script.ps1')。

有没有办法让脚本将其当前位置更改为所述快捷方式的位置?

示例:脚本本身在 D:\powershell\ 中,快捷方式在 C:\Work\Project1 中。我需要将脚本 cd 到 "C:\Work\Project1\".

谢谢

提供了一个有效的解决方案,前提是快捷方式文件是从桌面文件资源管理器.

此回答提供了背景信息


您必须将所需的工作目录配置为快捷方式文件的一部分,因为您调用的脚本对快捷方式一无所知调用了它。

因此,要配置一个特定的工作目录(例如,C:\Work\Project1),在快捷方式文件的属性中指定它Start in: 字段中的对话框。

如果您想以编程方式更新快捷方式文件的 (*.lnk) 工作目录,请使用 this answer 中的技术和 .WorkingDirectory 属性.

注意:在这两种情况下,只能将绝对路径配置为工作目录:文件资源管理器只允许您输入绝对路径,虽然编程方法允许您 分配 相对路径,但它 立即解析为绝对路径 ,相对于快捷方式的位置。

将快捷方式的自己的目录设为工作目录,您可以删除 Start in: 字段 / .WorkingDirectory 属性,但请注意 限制 :

  • 仅当这样的快捷方式从 桌面 或从 打开时才有效 文件资源管理器.

  • 相比之下,从任务栏或(仅限Windows 10之前)开始菜单,工作目录是$env:windir\System32(通常是C:\Windows\System32)。


如果快捷方式以应用程序(而不是文档)为目标,如本例,则快捷方式调用的 应用程序 - 包括 cmd.exepowershell.exe - 开始于配置/隐含的工作目录。

警告 cmd.exe:如果工作目录指定为 UNC 路径cmd.exe将无法更改到该目录;作为解决方法,使用带有 映射驱动器 的路径(但是,显然,在打开快捷方式时必须映射该驱动器)。

您可以使用快捷方式的 TargetPath 属性(可以使用 get-childitem $psscriptroot,其中名称类似于脚本名,扩展名类似于 .lnk)和 set-location cmdlet

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/set-location?view=powershell-6

您可以创建一个快捷方式,从它所在的任何目录开始。您所要做的就是修改快捷方式的"Starts In" 属性,并将其清空。那就对了。将其设置为空。

然后,当您要调用快捷方式时,请导航到它所在的文件夹(目录),然后再调用它。我将此技术用于启动 powershell 但不启动脚本的快捷方式。我还没有使用启动脚本的快捷方式对其进行测试。