我遇到了类似的问题,这给我带来了很多麻烦,因为我正在制作用 PowerShell(完整的最终用户 GUI 应用程序)编写的程序,并且我有很多文件和资源需要从磁盘加载。根据我的经验,.
用来表示当前目录是不可靠的。它应该代表当前工作目录,但通常不代表。看来 PowerShell 保存了在 PowerShell 中调用 PowerShell 的位置.
。更准确地说,当 PowerShell 首次启动时,默认情况下,它会在您的主用户目录中启动。这通常是您的用户帐户的目录,例如C:\USERS\YOUR USER NAME
. 之后,PowerShell 将目录更改为您调用它的目录,或者更改为您正在执行的脚本所在的目录,然后再向您显示 PowerShell 提示符或运行脚本。但这发生在 PowerShell 应用程序本身最初在您的主用户目录中启动之后。
并.
表示 PowerShell 在其中启动的初始目录。因此,.
仅代表当前目录,以防您从所需目录调用 PowerShell。如果您稍后在 PowerShell 代码中更改目录,则更改似乎不会.
在每种情况下都反映在内部。在某些情况下.
代表当前工作目录,而在其他目录中,PowerShell(本身,而不是脚本)已被调用,这会导致结果不一致。出于这个原因,我使用调用程序脚本。PowerShell 脚本,其中包含单个命令:
POWERSHELL
. 这将确保从所需目录调用 PowerShell,从而使.
代表当前目录。但它仅在您稍后不在 PowerShell 代码中更改目录时才有效。在脚本的情况下,我使用类似于我提到的最后一个的调用程序脚本,除了它包含一个文件选项:
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. 这确保 PowerShell 在当前工作目录中启动。
无论脚本位于何处,只需单击脚本即可从您的主用户目录调用 PowerShell。它导致当前工作目录是脚本所在的目录,但 PowerShell 调用目录是C:\USERS\YOUR USER NAME
,并且.
根据情况返回这两个目录之一,这是荒谬的。
但是为了避免所有这些大惊小怪并使用调用程序脚本,您可以简单地使用$PWD
或$PSSCRIPTROOT
代替.
表示当前目录,具体取决于您希望表示当前工作目录或调用脚本的目录的天气。如果您出于某种原因想要检索.
返回的两个目录中的另一个,您可以使用$HOME
.
我个人只是在我使用 PowerShell 开发的应用程序的根目录中有调用程序脚本,它调用我的主应用程序脚本,并且只记得永远不要更改我的应用程序源代码中的当前工作目录,所以我永远不必担心这个,我可以.
用来表示当前目录并在我的应用程序中支持相对文件寻址而没有任何问题。这应该适用于较新版本的 PowerShell(比版本 2 新)。