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

4

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

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

例如:脚本本身位于D:\powershell\,快捷方式位于C:\Work\Project1。我需要脚本cd到"C:\Work\Project1\"。

谢谢

3个回答

3
您可以创建一个快捷方式,使其始于任何目录。您需要修改快捷方式的“起始位置”属性,并将其清空。也就是说,将其设置为无。然后,在调用快捷方式之前,请导航到它所在的文件夹(目录)。我使用这种技术来启动PowerShell但不启动脚本的快捷方式。我尚未测试过启动脚本的快捷方式是否有效。

我有点晚了(抱歉),但我会在这里加入讨论: 我有一个位于我们NAS上的脚本,它从某个地方提取数据,处理它们并导出Excel文件。我创建了一个快捷方式文件,供非IT人员运行,因此他们只需要复制快捷方式。我希望生成的文件保存在他们复制的快捷方式相同的位置 - 如果该人将快捷方式放在D:\ Work \ Project1中,则希望将生成的Excel文件也保存在那里。 - Jlisk
我的回答对你很有参考价值,但需要一些解释。如果将快捷方式的“开始于”属性留空,则由其调用的进程将继承当前文件夹或目录。如果用户在运行快捷方式之前打开包含文件夹,则该文件夹将成为当前文件夹,然后被继承。 - Walter Mitty
@Jlisk:关于Walter的解决方案唯一需要注意的是,您的用户必须从桌面或通过文件资源管理器打开快捷方式,否则无法从任务栏或开始菜单中打开。 - mklement0
1
谢谢更新。还有警告。我没有想到从任务栏打开。 - Walter Mitty

1

沃尔特·米蒂的有用回答提供了一个有效的解决方案,前提是 快捷方式文件从 桌面文件资源管理器 中打开。

这个回答提供了背景信息


您必须将所需的工作目录配置为“快捷方式文件”的一部分,因为调用的脚本对调用它的快捷方式一无所知。
因此,要配置特定的工作目录(例如C:\ Work \ Project1),请在快捷方式文件的属性对话框中的“启动位置”字段中指定它。
如果您想以编程方式更新快捷方式文件(*.lnk)的工作目录,请使用this answer中的技术和.WorkingDirectory属性。
注意:在这两种情况下,只能配置绝对路径作为工作目录:文件资源管理器只允许您输入绝对路径,而编程方法虽然允许您分配相对路径,但它会立即解析为绝对路径,相对于快捷方式的位置。
为了使快捷方式的“自己的目录”成为工作目录,您可以清空“起始位置:”字段/ .WorkingDirectory属性,但请注意以下限制:
- 仅在从“桌面”或“文件资源管理器”中打开此类快捷方式时才有效。 - 相反,在任务栏或(仅适用于Windows 10之前的版本)“开始菜单”中打开它时,工作目录为$env:windir\System32(通常为C:\Windows\System32)。
如果快捷方式的目标是一个应用程序(而不是文档),就像这种情况一样,那么由快捷方式调用的应用程序 - 包括cmd.exepowershell.exe - 将在配置/暗示的工作目录中启动。

关于cmd.exe的注意事项:如果工作目录被指定为UNC路径cmd.exe将无法切换到该目录;作为解决方法,请改用带有映射驱动器的路径(但是,显然,在打开快捷方式时必须映射该驱动器)。

@Jlisk:不,相对路径是不可能的——请看我的更新——但即使是它们也无法解决你的问题——Walter的答案才是正确的方法。 - mklement0

-1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接