ค้นหาเว็บไซต์

วิธีรับไดเรกทอรีปัจจุบันหรือเส้นทางสคริปต์ใน PowerShell


ในฐานะมืออาชีพที่ทำงานกับ PowerShell ฉันมักจะได้รับคำถามเพื่อรับไดเร็กทอรีปัจจุบันจากสคริปต์ PowerShell ซึ่งเป็นภาษาสคริปต์อเนกประสงค์ของ Microsoft ได้รับการบูรณาการอย่างลึกซึ้งในระบบปฏิบัติการ Windows สิ่งนี้ทำให้มีศักยภาพอย่างไม่น่าเชื่อในการจัดการงานจัดการไฟล์และไดเร็กทอรี ทำให้การทราบเส้นทางปัจจุบันที่คุณกำลังทำงานอยู่เป็นสิ่งสำคัญ ดังนั้น ในคู่มือนี้ เราจะอธิบายวิธีต่างๆ ให้คุณทราบเพื่อรับไดเร็กทอรีปัจจุบัน ไดเร็กทอรีสคริปต์ และเส้นทางสคริปต์โดยใช้ PowerShell ไม่ว่าคุณจะต้องการเส้นทางของสคริปต์ที่มีอยู่หรือเส้นทางแบบเต็มของตำแหน่งปัจจุบัน เราก็พร้อมช่วยคุณ

ทำความเข้าใจกับไดเรกทอรีปัจจุบันใน PowerShell

ใน PowerShell ไดเร็กทอรีปัจจุบันอ้างอิงถึงไดเร็กทอรีที่คุณกำลังทำงานอยู่ นี่เป็นสิ่งสำคัญเนื่องจาก cmdlets และสคริปต์จำนวนมากทำงานกับไฟล์และไดเร็กทอรีที่เกี่ยวข้องกับไดเร็กทอรีปัจจุบัน ตัวอย่างเช่น หากคุณอยู่ในไดเรกทอรี “C:\Users\Thomas\Desktop” และคุณเรียกใช้สคริปต์ที่เข้าถึงไฟล์ในไดเรกทอรี Documents สคริปต์จะค้นหาไฟล์ใน C:\Users\Thomas\Desktop \Documents แทน C:\Users\Thomas\Documents เราสามารถสร้าง ย้าย เปลี่ยนชื่อ และลบไดเร็กทอรีใน PowerShell ได้อย่างง่ายดาย แต่ก่อนที่คุณจะสามารถทำงานกับไดเร็กทอรีได้อย่างมีประสิทธิภาพ คุณต้องรู้ว่าปัจจุบันคุณอยู่ที่ไหน นั่นคือจุดที่การดำเนินการ "รับไดเรกทอรีปัจจุบัน" ก้าวเข้าสู่สปอตไลท์

ไดเรกทอรีปัจจุบันไม่เหมือนกับไดเรกทอรีการติดตั้ง PowerShell หรือไดเรกทอรีโปรไฟล์ผู้ใช้ คุณสามารถเปลี่ยนไดเร็กทอรีปัจจุบันได้โดยใช้ Set-Location cmdlet หรือนำทางไปยังไดเร็กทอรีใหม่โดยใช้คำสั่ง cd

วิธีรับไดเร็กทอรีปัจจุบันใน PowerShell

ไม่ว่าคุณจะจัดการกับไฟล์ เปลี่ยนแปลงการกำหนดค่า หรือทำงานกับสคริปต์ การจดจำไดเร็กทอรีปัจจุบันของคุณเป็นสิ่งสำคัญ ไดเร็กทอรีปัจจุบันหรือไดเร็กทอรีการทำงานคือไดเร็กทอรี (โฟลเดอร์) ที่สภาพแวดล้อม PowerShell ของคุณกำลังทำงานอยู่ โดยจะกำหนดจุดที่เส้นทางสัมพัทธ์เกิดขึ้นและมีบทบาทสำคัญในงานการจัดการไฟล์

วิธีที่ 1: การใช้ Get-Location Cmdlet

วิธีที่ตรงที่สุดในการรับไดเร็กทอรีปัจจุบันของคุณใน PowerShell คือการใช้ cmdlet Get-Location cmdlet นี้ดึงข้อมูลตำแหน่งการทำงานปัจจุบัน เช่น เส้นทางของไดเรกทอรีที่คุณอยู่ cmdlet นี้ส่งคืนเส้นทางของไดเรกทอรีปัจจุบัน รวมถึงเส้นทางและผู้ให้บริการ (ระบบไฟล์หรือรีจิสทรี) หากต้องการใช้งานให้พิมพ์ "Get-Location" แล้วกด Enter ระบบจะแสดงเส้นทางแบบเต็มของไดเร็กทอรีปัจจุบันในพรอมต์ PowerShell

ไวยากรณ์สำหรับ Get-Location cmdlet จะเป็นดังนี้:


#Syntax 1
Get-Location
   [-PSProvider <String[]>]
   [-PSDrive <String[]>]
   [<CommonParameters>]

#Syntax 2
Get-Location
   [-Stack]
   [-StackName <String[]>]
   [<CommonParameters>]

นี่คือรายการพารามิเตอร์ที่ดีของ cmdlet นี้

ParameterDescriptionExample
-PSDriveRetrieves the current location from the specified PowerShell drive. E.g., PowerShell Registry Provider. Get-Location -PSDrive HKCU
-PSProviderRetrieves the current location for the specified provider. Providers can include the FileSystem, Registry, Certificate stores, etc. If the provider supports multiple drives, this cmdlet returns the location of the most recently accessed drive.Get-Location -PSProvider FileSystem
-StackDisplays the location default stack. PowerShell maintains a stack of locations you can push to and pop from using Push-Location cmdlet and Pop-Location cmdlet. This parameter shows the current stack contents.Get-Location -Stack
-StackNameThe Stackname parameter displays the location from a named location stack. You can have multiple named location stacks.Get-Location -StackName myStack

มันสามารถย้ายไปมาระหว่างไดรฟ์ PowerShell, ไดรฟ์อื่น, ไดเร็กทอรี Windows ฯลฯ ต่อไปนี้คือตัวอย่างในการรับเส้นทางไดเร็กทอรีปัจจุบันโดยใช้คำสั่ง Get-Location:


PS C:\Users\Thomas> Get-Location

Path
----
C:\Users\Thomas

ตัวอย่างนี้แสดงให้เห็นว่าไดเร็กทอรี Windows ปัจจุบันคือ C:\Users\Thomas คุณยังสามารถใช้นามแฝง “pwd” เพื่อรับไดเร็กทอรีปัจจุบันได้ คุณใช้ cmdlet pwd (คำย่อสำหรับ “ไดเรกทอรีการทำงานการพิมพ์”) เพื่อแสดงไดเรกทอรีปัจจุบันในคอนโซล PowerShell หากต้องการใช้งานให้พิมพ์ “pwd” แล้วกด Enter เส้นทางแบบเต็มของไดเร็กทอรีปัจจุบันจะปรากฏขึ้น


PS C:\Users\Thomas> pwd

Path
----
C:\Users\Thomas

เมื่อคุณเรียกใช้คำสั่งนี้ PowerShell จะส่งคืนเส้นทางของไดเรกทอรีปัจจุบันของคุณ นี่ทำหน้าที่เป็นจุดเริ่มต้นของคุณ ซึ่งเป็นจุดเริ่มต้นในการกำหนดเส้นทางสัมพัทธ์ทั้งหมด

วิธีที่ 2: การรับไดเรกทอรีสคริปต์ใน PowerShell โดยใช้ตัวแปร $PSScriptRoot

ไดเร็กทอรีสคริปต์คือไดเร็กทอรีที่มีสคริปต์ที่รันอยู่ในปัจจุบัน สิ่งนี้มีประโยชน์สำหรับการเข้าถึงไฟล์หรือสคริปต์อื่นในไดเร็กทอรีเดียวกันกับสคริปต์ หากต้องการรับไดเรกทอรีสคริปต์ใน PowerShell คุณสามารถใช้ตัวแปร $PSScriptRoot ตัวแปรนี้มีเส้นทางแบบเต็มของไดเร็กทอรีที่มีสคริปต์อยู่ นี่คือตัวอย่าง: สมมติว่าคุณมีไฟล์สคริปต์ PowerShell ชื่อ “CopyFiles.ps1” โดยมีเนื้อหาด้านล่างนี้:


Echo $PSScriptRoot

การรันสคริปต์จะดึงข้อมูลตำแหน่งปัจจุบันที่สคริปต์ถูกจัดเก็บไว้


PS C:\Users\Thomas\Desktop> .\CopyFiles.ps1

C:\Users\Thomas\Desktop

ตัวอย่างนี้แสดงให้เห็นว่าไดเร็กทอรีสคริปต์คือ C:\Users\Thomas\Desktop\ โปรดทราบว่าตัวแปร $PSScriptRoot มีเฉพาะในสคริปต์เท่านั้น ไม่มีในคอนโซล PowerShell หรือ PowerShell ISE

วิธีที่ 3: การรับเส้นทางสคริปต์ใน PowerShell

เส้นทางสคริปต์คือเส้นทางแบบเต็มของสคริปต์ที่กำลังทำงานอยู่ รวมถึงอักษรชื่อไดรฟ์และไดเรกทอรีย่อย หากต้องการรับเส้นทางสคริปต์ใน PowerShell คุณสามารถใช้ตัวแปร $MyInvocation ตัวแปรนี้มีข้อมูลเกี่ยวกับสคริปต์ปัจจุบัน รวมถึงเส้นทางและอาร์กิวเมนต์บรรทัดคำสั่ง นี่คือตัวอย่าง:


#Get Script Path
$MyInvocation.MyCommand.Path

#Get the folder of the script
Split-Path -Path $MyInvocation.MyCommand.Path -Parent

นี่คือสิ่งที่คุณจะเห็นเมื่อเรียกใช้สคริปต์:


PS C:\Users\Thomas\Desktop> .\MyScript.ps1

C:\Users\Thomas\Desktop\MyScript.ps1
C:\Users\Thomas\Desktop

ตัวอย่างนี้แสดงเส้นทางสัมบูรณ์ของสคริปต์: C:\Users\Thomas\Desktop\MyScript.ps1 โปรดทราบว่าตัวแปร $MyInvocation มีเฉพาะในสคริปต์เท่านั้น ไม่มีในคอนโซล PowerShell

วิธีที่ 4: การใช้ตัวแปร $PWD

อีกวิธีหนึ่งในการรับไดเร็กทอรีปัจจุบันใน PowerShell คือการใช้ตัวแปร $PWD ตัวแปรนี้เก็บไดเรกทอรีการทำงานปัจจุบันเป็นวัตถุ PowerShell หากต้องการแสดงไดเร็กทอรีปัจจุบันโดยใช้วิธีนี้ ให้พิมพ์ “$PWD” แล้วกด Enter เส้นทางแบบเต็มของไดเร็กทอรีปัจจุบันจะปรากฏขึ้น


$pwd | Select -ExpandProperty Path

วิธีที่ 5: การใช้คุณสมบัติ [สภาพแวดล้อม]::CurrentDirectory

สุดท้ายนี้ คุณยังสามารถรับไดเร็กทอรีปัจจุบันใน PowerShell ได้โดยใช้คุณสมบัติ [สภาพแวดล้อม]::CurrentDirectory คุณสมบัตินี้ส่งคืนเส้นทางของไดเร็กทอรีปัจจุบันเป็นสตริง หากต้องการแสดงไดเร็กทอรีปัจจุบันโดยใช้วิธีนี้ ให้พิมพ์ "[สิ่งแวดล้อม]::CurrentDirectory" แล้วกด Enter เส้นทางแบบเต็มของไดเร็กทอรีปัจจุบันจะปรากฏขึ้น


[Environment]::CurrentDirectory 

วิธีที่ 6: รับเส้นทางไดเรกทอรีปัจจุบันโดยใช้ Get-Item cmdlet

คุณสามารถรับเส้นทางไดเรกทอรีปัจจุบันได้โดยใช้ Get-Item cmdlet โดยใช้คำสั่งต่อไปนี้:


(Get-Item .).FullName

ที่นี่จุด (.) ระบุไดเร็กทอรีปัจจุบัน

ข้อผิดพลาดทั่วไปที่ควรหลีกเลี่ยงเมื่อทำงานกับไดเรกทอรีใน PowerShell

ต่อไปนี้เป็นข้อผิดพลาดทั่วไปที่ควรหลีกเลี่ยงเมื่อทำงานกับไดเร็กทอรีใน PowerShell:

  1. สมมติว่าไดเรกทอรีปัจจุบันจะเหมือนกันเสมอ ไดเร็กทอรีปัจจุบันสามารถเปลี่ยนแปลงได้โดยสคริปต์ cmdlets หรืออินพุตของผู้ใช้
  2. การใช้เส้นทางสัมพัทธ์โดยไม่คำนึงถึงไดเร็กทอรีปัจจุบัน เส้นทางสัมพัทธ์ได้รับการแก้ไขโดยสัมพันธ์กับไดเร็กทอรีปัจจุบัน ดังนั้นการเปลี่ยนไดเร็กทอรีปัจจุบันอาจส่งผลต่อผลลัพธ์
  3. เรามักจะลืมจัดการกับข้อผิดพลาดเมื่อเข้าถึงไฟล์หรือไดเร็กทอรี PowerShell มีกลไกการจัดการข้อผิดพลาดมากมาย เช่น คำสั่ง Try-Catch-Finally และพารามิเตอร์ -ErrorAction

บทสรุปและความคิดสุดท้าย

โดยสรุป มีหลายวิธีในการรับไดเร็กทอรีปัจจุบันใน PowerShell ตั้งแต่คำสั่งง่ายๆ เช่น pwd และ Get-Location ไปจนถึงการใช้ตัวแปรและคุณสมบัติ ในคู่มือนี้ ฉันได้อธิบายแนวคิดของไดเรกทอรีปัจจุบันใน PowerShell และแสดงวิธีรับไดเรกทอรีปัจจุบัน ไดเรกทอรีสคริปต์ และเส้นทางสคริปต์โดยใช้ PowerShell ไม่ว่าคุณจะต้องการเส้นทางแบบเต็มหรือไดเร็กทอรีสคริปต์ คุณสามารถเข้าถึง PowerShell ได้อย่างรวดเร็วและง่ายดาย ทดลองใช้วิธีการเหล่านี้เพื่อค้นหาวิธีที่ดีที่สุดสำหรับความต้องการของคุณ

หากต้องการเปลี่ยนตำแหน่งเป็นเส้นทางอื่น ให้ใช้ Set-Location cmdlet (เช่น Set-Location C:\Temp) เพิ่มเติมที่นี่: จะเปลี่ยนไดเรกทอรีปัจจุบันใน PowerShell ได้อย่างไร

คำถามที่พบบ่อย:

ฉันจะดึงข้อมูลไดเรกทอรีปัจจุบันใน PowerShell ได้อย่างไร

หากต้องการดึงข้อมูลไดเรกทอรีปัจจุบันใน PowerShell คุณสามารถใช้ PowerShell cmdlets เช่น “Get-Location” หรือนามแฝง pwd ตัวอย่างเช่น:

$currentDirectory = Get-Location
Write-Host "Current directory: $($currentDirectory.Path)"

ฉันจะรับเส้นทางของสคริปต์ปัจจุบันใน PowerShell ได้อย่างไร

หากต้องการรับเส้นทางของสคริปต์ปัจจุบันใน PowerShell คุณสามารถใช้คำสั่ง “$MyInvocation.MyCommand.Path”

ฉันจะเข้าถึงโฟลเดอร์เฉพาะใน PowerShell ได้อย่างไร

หากต้องการเข้าถึงโฟลเดอร์เฉพาะใน PowerShell คุณสามารถใช้ cmdlet “Set-Location” หรือนามแฝง “cd” ตามด้วยเส้นทางของโฟลเดอร์ที่คุณต้องการเข้าถึง

ฉันจะค้นหาเส้นทางของโฟลเดอร์ใน PowerShell ได้อย่างไร

ใน PowerShell คุณสามารถค้นหาเส้นทางของโฟลเดอร์ได้โดยใช้ Resolve-Path สำหรับ Relative Paths:

$RelativePath = ".\Logs"
$FullPath = Resolve-Path $RelativePath
Write-Output $FullPath

ฉันจะตรวจสอบได้อย่างไรว่าไดเร็กทอรีใดเป็นไดเร็กทอรีปัจจุบัน

หากต้องการตรวจสอบว่าไดเรกทอรีใดเป็นไดเรกทอรีปัจจุบันหรือไม่ คุณสามารถเปรียบเทียบเส้นทางไดเรกทอรีปัจจุบันกับเส้นทางไดเรกทอรีที่ต้องการได้ ตัวอย่างเช่น:

if ((Get-Location).Path -eq "C:\Users\Thomas") {
Write-Host "You are in the desired directory."
} else {
Write-Host "You are not in the desired directory."
}

ฉันจะรับไดเร็กทอรีหลักของไดเร็กทอรีปัจจุบันได้อย่างไร

หากต้องการรับไดเร็กทอรีหลักของไดเร็กทอรีปัจจุบันใน PowerShell คุณสามารถใช้วิธีการต่อไปนี้: รับไดเร็กทอรีปัจจุบันโดยใช้ Get-Location จากนั้นรับไดเร็กทอรีพาเรนต์โดยใช้ Split-Path cmdlet พร้อมพารามิเตอร์ -Parent

#Get the current directory
$CurrentDir = Get-Location
#Get the parent directory
$parentDir = Split-Path $currentDir -Parent
$parentDir

บทความที่เกี่ยวข้อง