【问题标题】:Change location to shortcut location将位置更改为快捷方式位置
【发布时间】:2026-01-03 06:10:02
【问题描述】:

我正在启动一个带有 powershell 快捷方式的脚本(C:\Windows....\powershell.exe -file 'D:\powershell\script.ps1')。

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

示例:脚本本身位于 D:\powershell\ 中,快捷方式位于 C:\Work\Project1 中。我需要将脚本 cd 到“C:\Work\Project1\”。

谢谢

【问题讨论】:

    标签: windows powershell desktop-shortcut


    【解决方案1】:

    您可以创建一个从其所在目录开始的快捷方式。您所要做的就是修改快捷方式的“Starts In”属性,然后将其清空。这是正确的。将其设置为空。

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

    【讨论】:

    • 我有点晚了(抱歉),但我会在这里进入讨论:我有一个位于我们的 NAS 上的脚本它从某个地方提取数据,处理它们并导出一个 excel 文件。我创建了一个快捷方式文件来为我们的非 IT 人员运行它,因此他们只需要复制快捷方式。我希望将生成的文件保存在与他们复制的快捷方式相同的位置 - 如果此人将快捷方式放在 D:\Work\Project1 中,那么我也希望将生成的 excel 文件保存在那里。
    • 我的回答与您有关,但需要一些解释。如果您将快捷方式的 Starts In 属性置空,则由它调用的进程将继承当前文件夹或目录。如果用户在运行快捷方式之前打开了 containsng 文件夹,则 containsg 文件夹将变为当前文件夹。然后它会被继承。
    • @Jlisk:Walter 解决方案的唯一警告是,您的用户必须从桌面或通过文件资源管理器打开快捷方式 - 它无法从任务栏或开始菜单工作。
    • 感谢您的更新。也为了警告。没想到从任务栏打开。
    【解决方案2】:

    Walter Mitty's helpful answer 提供了一个有效的解决方案,前提是桌面文件资源管理器打开快捷方式文件。

    此答案提供背景信息


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

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

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

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

    使快捷方式的自己的目录成为工作目录,您可以清空Start in: 字段/.WorkingDirectory 属性,但是注意限制

    • 仅当此类快捷方式桌面文件资源管理器打开时才有效 >.

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


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

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

    【讨论】:

    • @Jlisk:不,相对路径是不可能的——请看我的更新——但即使它们也不能解决你的问题——沃尔特的答案是要走的路。
    【解决方案3】:

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

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

    【讨论】:

    • .TargetPath 属性指定要运行的可执行文件(或要打开的文档);在 OP 的情况下,它是 powershell.exe,因此您提出的建议与 OP 希望快捷方式调用的 *.ps1 脚本在与快捷方式本身相同的目录中运行的愿望无关。