所以,假设我在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”就不会有问题,但我希望能够移动脚本(及其依赖文件)而不必更新每次在脚本中引用。
感谢。
答案 0 :(得分:3)
在你的剧本中试试这个:
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
$path = join-path $dir "text.txt"
get-content $path
答案 1 :(得分:2)
我认为这个相关的StackOverflow问题提供了一个答案: How to get the current directory of the cmdlet being executed
您可能希望在脚本中使用$MyInvocation.MyCommand.Path