2010-09-08 52 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自動變量 - 它會告訴你模塊位於何處。

相關問題