我有一個位於D:\temp
的PowerShell腳本。如何獲取PowerShell腳本的文件系統位置?
當我運行這個腳本時,我想要列出文件的當前位置。我該怎麼做呢?
例如,這段代碼可以在DOS批處理文件中完成它;我試圖將其轉換爲一個PowerShell腳本...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
我有一個位於D:\temp
的PowerShell腳本。如何獲取PowerShell腳本的文件系統位置?
當我運行這個腳本時,我想要列出文件的當前位置。我該怎麼做呢?
例如,這段代碼可以在DOS批處理文件中完成它;我試圖將其轉換爲一個PowerShell腳本...
FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"
的PowerShell 3+
運行腳本的路徑是:
$PSCommandPath
其目錄是:
$PSScriptRoot
PowerShell 2
運行腳本的路徑是:
$MyInvocation.MyCommand.Path
其目錄是:
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
羅馬庫茲明恕我直言回答了這個問題。我只是補充一點,如果你導入一個模塊(通過Import-Module
),你可以在模塊內部訪問$PsScriptRoot
自動變量 - 它會告訴你模塊位於何處。
完美。謝謝! – Santhosh 2010-09-08 13:20:12
請小心使用'$ PSSriptRoot'。它是模塊中的預定義變量。 – 2010-09-08 13:35:53
@Keith,基本上我同意推薦給所有人使用$ PSScriptRoot並不是一個好主意。至少它不應該用在生產腳本中。我剛剛從我的「個人」腳本中複製/粘貼。我使用這個名字是因爲它很方便:我的代碼在任何地方都使用$ PSScriptRoot:模塊(內置)和腳本(假)。 – 2010-09-08 14:20:42