บน 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>).Target | Symlink / Junction |
readlink -f <link> | Resolve-Path <link> | Symlink / Junction / Path ทุกประเภท |
ls -l | dir /a | Symlink / Junction |
| (ไม่มีบน Linux) | (New-Object -ComObject WScript.Shell).CreateShortcut(<link>).TargetPath | Windows Shortcut (.lnk) |
อ่านเพิ่มเติม