ป้ายกำกับ: เป้าหมาย

Windows: หา เป้าหมาย (Target) ของ Link หรือ ShortcutWindows: หา เป้าหมาย (Target) ของ Link หรือ Shortcut

บน Windows จะไม่มีคำสั่งที่ชื่อ readlink ตรง ๆ แต่จะมีคำสั่งและเครื่องมืออื่นที่ทำหน้าที่แบบเดียวกัน คือ “ใช้ตรวจสอบเป้าหมาย (Target) ของ Link หรือ Shortcut” ครับ

เนื่องจาก Windows มีระบบ Link หลัก ๆ อยู่ 3 ประเภท (Shortcut .lnk, Symbolic Link, และ Junction Point) คำสั่งที่ใช้แทน readlink จึงขึ้นอยู่กับเครื่องมือที่คุณเลือกใช้ ดังนี้ครับ


ใช้ Command Prompt (cmd) ด้วยคำสั่ง dir

วิธีที่ง่ายที่สุดโดยไม่ต้องพึ่งพาเครื่องมือเสริม คือการใช้คำสั่ง dir ในโฟลเดอร์ที่ Link นั้นอยู่ ระบบจะแสดงตำแหน่งปลายทางให้เห็นในวงเล็บ [...] ทันที
dir /a
ตัวอย่างผลลัพธ์
2010-06-14 10:00 my_config [C:\nginx\conf\nginx.conf]
2010-06-14 10:05 my_folder [D:\Data\TargetFolder]
💡 ข้อจำกัด: วิธีนี้ทำได้แค่ “ส่องดูด้วยตา” แต่ถ้าจะนำไปเขียน Script เพื่อแกะรอยเอาเฉพาะ Path ปลายทางไปใช้งานต่อแบบ readlink จะทำได้ค่อนข้างยาก


ใช้ PowerShell (แนะนำที่สุดสำหรับสาย Script)

หากคุณต้องการฟังก์ชันที่ทำงานเหมือน readlink -f (แกะรอยจนได้ Path ที่แท้จริง) PowerShell มีคำสั่งสำเร็จรูปที่ทำงานนี้ได้อย่างยอดเยี่ยมครับ


ใช้ Get-Item (สำหรับ Symlink และ Junction)

คุณสามารถดึง Property ที่ชื่อ Target ออกมาได้โดยตรง
(Get-Item "C:\path\to\link").Target


ใช้ Resolve-Path (ใกล้เคียง readlink -f ที่สุด)

คำสั่งนี้จะแปลง Path ไม่ว่าจะเป็น Symlink, Relative path (.\) หรือสัญกรณ์ใด ๆ ให้กลายเป็น Absolute Path ตัวจริงของปลายทาง
Resolve-Path "C:\path\to\link"


สำหรับไฟล์ Windows Shortcut (.lnk) ทั่วไป

หากไฟล์นั้นไม่ใช่ Symlink ของระบบแต่เป็นไฟล์ทางลัดหน้าจอทั่วไป (ไฟล์นามสกุล .lnk) ทั้งคำสั่ง dir และ Get-Item จะอ่านปลายทางไม่ออก ต้องใช้ PowerShell ควบคู่กับ COM Object ในการอ่านแทนครับ

$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("C:\Users\User\Desktop\MyApp.lnk")
$Shortcut.TargetPath

คำสั่งนี้จะแสดงผลลัพธ์เป็น Path ของไฟล์ .exe หรือโฟลเดอร์ต้นทางที่แท้จริง


🛠️ สรุปตารางเปรียบเทียบเทียบเท่าคำสั่ง Linux vs Windows

การทำงานบน Linuxคำสั่งเทียบเท่าบน Windows (PowerShell / CMD)ประเภทของ Link ที่รองรับ
readlink <link>(Get-Item <link>).TargetSymlink / Junction
readlink -f <link>Resolve-Path <link>Symlink / Junction / Path ทุกประเภท
ls -ldir /aSymlink / Junction
(ไม่มีบน Linux)(New-Object -ComObject WScript.Shell).CreateShortcut(<link>).TargetPathWindows Shortcut (.lnk)

อ่านเพิ่มเติม