我遇到了类似的问题,这使我很麻烦,因为我正在制作用PowerShell(完整的最终用户GUI应用程序)编写的程序,并且我需要从磁盘加载很多文件和资源。根据我的经验,使用。之后,PowerShell会在向您显示PowerShell提示符或运行脚本之前,将目录更改为您从中调用该目录的目录或您正在执行的脚本所在的目录。但这是在PowerShell应用程序本身最初在您的主用户目录内启动之后发生的。.
用于表示当前目录是不可靠的。它应该代表当前的工作目录,但通常不是。看来PowerShell会保存其中已从中调用PowerShell的位置.
。更确切地说,首次启动PowerShell时,默认情况下,它将在您的主用户目录中启动。通常是您的用户帐户目录,例如C:\USERS\YOUR USER NAME
并且.
代表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更高)中起作用。