【问题标题】:Getting the current directory where the script is executed as opposed to the current executing directory of the script获取执行脚本的当前目录,而不是脚本的当前执行目录
【发布时间】:2023-03-29 21:21:01
【问题描述】:

我想获取执行脚本的当前目录,而不是脚本的当前执行目录。

脚本位于 'd:\projects\code\development.tools' 中,我想要位于 'd:\projects\code\development\ace\ace.testing' 中的项目目录

现在,当我在 Psake 属性之外执行 'Write-Host $Env:PWD' 或只是 '$Env:PWD' 时,我实际上得到了我想要的,但是当我尝试从属性中获取它时它返回 $PWD 返回的内容,即脚本的执行目录。

Write-Host $Env:PWD # returns d:\projects\code\development\ace\ace.testing

Properties {
    $baseDir = $Env:PWD # returns d:\projects\code\development\.tools
}

我不确定这里发生了什么,但我想不通。

我试图将正确的路径存储在一个变量中,但它并没有真正起作用。

更新:

花了几个小时后,我意识到它确实有效!我一直在处理那个脚本,然后在某个地方放了一个 throw 语句,却忘记了它的存在!所以我认为 Psake 正在做一些奇怪的事情,因此它不起作用,但是 Psake 是纯粹的! ;)

因此,如果您想获取正在执行脚本的当前目录 $Env:PWD 似乎可以做到! :)

【问题讨论】:

    标签: powershell psake


    【解决方案1】:

    要获取正在执行的脚本的位置:

    Split-Path $myInvocation.MyCommand.Path
    

    获取当前工作目录的路径:

    (Get-Item -Path '.\' -Verbose).FullName
    

    【讨论】:

    • 它没有,这就是我得到的 'D:\projects\code\.tools'。
    • 哦...我很困惑。我以为你得到了 PWD 但想要脚本位置
    • 知道了!我做了一些傻事,$Env:PWD 工作正常!
    【解决方案2】:

    花了几个小时后,我意识到它确实有效!我一直在处理那个脚本,然后在某个地方放了一个 throw 语句,却忘记了它的存在!

    因此,如果您想获取正在执行脚本的当前目录,$Env:PWD 似乎可以做到! :)

    【讨论】:

    • 不要认为这是通用的。我正在使用新的 pwsh 7.0 并且 $Env:PWD 返回 null。机器也很新。 @EBGreen 的回答效果最好。
    • @ConnorLow 谢谢,我更改了接受的答案,即使对于我的用例它有效。
    最近更新 更多