2010-09-08 84 views
43

我有一个位于D:\temp的PowerShell脚本。如何获取PowerShell脚本的文件系统位置?

当我运行这个脚本时,我想要列出文件的当前位置。我该怎么做呢?

例如,这段代码可以在DOS批处理文件中完成它;我试图将其转换为一个PowerShell脚本...

FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa 
CD /d "%this_cmds_dir%" 

回答

88

的PowerShell 3+

运行脚本的路径是:

$PSCommandPath 

其目录是:

$PSScriptRoot 

PowerShell 2

运行脚本的路径是:

$MyInvocation.MyCommand.Path 

其目录是:

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent 
+0

完美。谢谢! – Santhosh 2010-09-08 13:20:12

+1

请小心使用'$ PSSriptRoot'。它是模块中的预定义变量。 – 2010-09-08 13:35:53

+0

@Keith,基本上我同意推荐给所有人使用$ PSScriptRoot并不是一个好主意。至少它不应该用在生产脚本中。我刚刚从我的“个人”脚本中复制/粘贴。我使用这个名字是因为它很方便:我的代码在任何地方都使用$ PSScriptRoot:模块(内置)和脚本(假)。 – 2010-09-08 14:20:42

5

罗马库兹明恕我直言回答了这个问题。我只是补充一点,如果你导入一个模块(通过Import-Module),你可以在模块内部访问$PsScriptRoot自动变量 - 它会告诉你模块位于何处。

相关问题