2010-09-08 29 views
43

Tôi có tập lệnh PowerShell tại số D:\temp.Làm cách nào để có được vị trí hệ thống tệp của tập lệnh PowerShell?

Khi tôi chạy tập lệnh này, tôi muốn vị trí hiện tại của tệp được liệt kê. Làm thế nào để tôi làm điều này?

Ví dụ: mã này sẽ thực hiện nó trong tệp lô DOS; Tôi cố gắng để chuyển đổi này cho một kịch bản PowerShell ...

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

Trả lời

88

PowerShell 3+

Con đường của một kịch bản chạy là:

$PSCommandPath 

thư mục của nó là:

$PSScriptRoot 

PowerShell 2

Con đường của một kịch bản chạy là:

$MyInvocation.MyCommand.Path 

thư mục của nó là:

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

hoàn hảo. cảm ơn! – Santhosh

+1

Hãy cẩn thận khi sử dụng '$ PSSriptRoot'. Đó là một biến được xác định trước trong một mô-đun. –

+0

@Keith, về cơ bản, tôi đồng ý rằng bạn nên đề xuất $ PSScriptRoot cho mọi người. Ít nhất nó không nên được sử dụng trong các kịch bản sản xuất. Tôi chỉ cần sao chép/dán này từ kịch bản "cá nhân" của tôi. Tôi sử dụng chính xác tên này bởi vì nó là thuận tiện: mã của tôi sử dụng $ PSScriptRoot ở khắp mọi nơi: trong mô-đun (được xây dựng trong) và trong các kịch bản (giả). –

5

La Mã Kuzmin trả lời câu hỏi IMHO. Tôi sẽ chỉ thêm rằng nếu bạn nhập một mô-đun (thông qua Import-Module), bạn có thể truy cập $PsScriptRoot biến tự động bên trong mô-đun - sẽ cho bạn biết vị trí của mô-đun.

Các vấn đề liên quan