2

所以假设我在 C:\scripts\MyScript.ps1 有一个脚本,它很简单:

Get-Content ".\text.txt"

在 C:\scripts 中,我还有一个文件 text.txt,其中包含调用脚本时打印的任意文本。如果我在 PowerShell 的当前目录为 C:\scripts 时使用此脚本,它可以正常工作。但是,如果 PowerShell 当前位于不同的目录中,例如 C:\otherFolder,则因此从 PoSh 命令窗口调用脚本会失败:

PS C:\otherFolder> ..\scripts\MyScript.ps1

这是我所期望的,因为脚本中对 text.txt 的引用是相对的,并且该文件不存在于 C:\otherFolder 中。我的问题是,有没有办法编写一个脚本,它具有对其他文件的相对引用,即使从不同的文件夹中调用,它仍然可以按预期工作?

我意识到如果脚本引用“C:\scripts\text.txt”不会有问题,但我希望能够移动脚本(及其依赖文件)而无需更新每次的脚本。

谢谢。

4

2 回答 2

3

在你的脚本中试试这个:

$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
$path = join-path $dir "text.txt"
get-content $path
于 2013-10-23T14:49:02.847 回答
2

我认为这个相关的 StackOverflow 问题提供了一个答案: 如何获取正在执行的 cmdlet 的当前目录

您可能希望$MyInvocation.MyCommand.Path在脚本中使用

于 2013-10-23T14:49:10.297 回答