Kiểm tra vị trí của một liên kết tượng trưng tại Windows 7


24

Trong Windows 7, làm cách nào tôi có thể kiểm tra xem một tệp có phải là một liên kết tượng trưng hay không, nếu một thư mục có phải là một điểm nối hay không và làm cách nào tôi có thể kiểm tra xem chúng đang trỏ đến đâu (trong trường hợp chúng là liên kết / giao diện). Cả trong Explorer và trong dòng lệnh.

Điều rất quan trọng là phải có cách thực hiện từ dòng lệnh, để biết cách sao chép các liên kết tượng trưng trên một máy tính khác khi bạn muốn tạo một bản sao chính xác của cây thư mục.

Nếu tôi nhấp chuột phải vào một tệp và kiểm tra "Thuộc tính", tôi không thể tìm thấy bất kỳ dấu hiệu nào cho thấy đó là liên kết tượng trưng.

Câu trả lời:


26

Lệnh dir dir /a có thể làm điều này:

2012-12-26  09:30 PM    <DIR>          .
2012-12-26  09:30 PM    <DIR>          ..
2012-12-26  09:30 PM                 0 a.txt
2012-12-26  09:30 PM    <SYMLINK>      link.txt [a.txt]

Ngoài ra, bạn có thể sử dụng Windows Explorer:

Right click column, More, Link Target

Điều này không hoạt động trong windows 7 (Microsoft Windows [Phiên bản 6.1.7601])
gonzalezea

1
@gonzalezea vâng, đúng vậy. Nó đã hoạt động với Windows 7 vào năm 2012 khi tôi đăng bài này và nó cũng hoạt động
Steven Penny

Có lẽ không quá rõ ràng với người dùng mới, đây là một giải pháp dòng lệnh. Người dùng phải mở một dấu nhắc lệnh, sau đó thay đổi thư mục (sử dụng lệnh CD) thành thư mục chứa liên kết tượng trưng, ​​sau đó nhập lệnh DIR và nhấn phím 'enter'. Chạy lệnh DIR trong thư mục sai là một lỗi phổ biến. Nhưng có thể hiểu được, trừ khi bạn chắc chắn thư mục nào có liên kết tượng trưng (không phải lúc nào cũng rõ ràng, vì GUI của Windows không cho bạn biết rõ liệu một thư mục cụ thể có chứa bất kỳ liên kết hoặc liên kết nào không). Hãy tìm một lối tắt có loại FILE FILEER thay vì SHORTCUT .
Ed999

2
Trường mục tiêu liên kết trống trên windows 7
Ronen Festinger

1
từ dòng lệnh bạn nên nhập dir /arồi nhấn Enter. Nếu bạn không bao gồm / a, các cửa sổ sẽ không liệt kê các điểm giao nhau. Bạn có thể thử sự khác biệt giữa dirdir /atrên thư mục\Users\YourUsername
Paulus

4

Sao chép từ StackOverFlow , tôi chỉ sử dụng dòng này và nó hoạt động

fsutil reparsepoint query "folder name" | find "Symbolic Link" >nul && echo symbolic link found || echo No symbolic link

Giải thích :

Từ MSDN về FSUtil: Thực hiện các tác vụ liên quan đến bảng phân bổ tệp (FAT) và hệ thống tệp NTFS, chẳng hạn như quản lý các điểm lặp lại, quản lý các tệp thưa hoặc xóa một ổ đĩa. Nếu nó được sử dụng mà không có tham số, fsutil hiển thị danh sách các tiểu ban được hỗ trợ.

Để sử dụng, chúng tôi chỉ quan tâm rằng nó xuất ra một dòng có "Liên kết tượng trưng" trong đó, nếu nó mang tính biểu tượng, sau đó chúng tôi findvà nếu findthành công, chúng tôi sẽ tạo ra một thứ, nếu không, chúng tôi sẽ tạo ra một thứ khác.

Ghi chú :

  • Các trích dẫn xung quanh tên thư mục là bắt buộc nếu đường dẫn có khoảng trắng trong đó.
  • Nó cung cấp cùng một đầu ra cho dù thư mục không tồn tại hay không phải là một liên kết tượng trưng, ​​sử dụng một cách thận trọng.

2

Sử dụng PowerShell, trên ít nhất là HĐH Windows, bạn có thể tìm thấy các liên kết tượng trưng trong bất kỳ thư mục cụ thể nào, chẳng hạn như sau:

Get-ChildItem 'C:\nodejs\bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Một cách khác ngắn gọn hơn sẽ là sử dụng Get-ChildItembí danh ls:

ls 'C:\nodejs' -Attributes ReparsePoint -Recurse

Và bạn có thể nhận thông tin liên quan trên một liên kết tượng trưng bằng cách thực hiện bất kỳ thao tác nào sau đây:

Lấy mục tệp và xuất thuộc tính Target của nó . Mục tiêu là "giá trị" của liên kết tượng trưng. Ngoài ra, chữ ký phương thức hoặc lệnh để tạo liên kết tượng trưng khi nối giữa các hệ điều hành, các tên đối số của: 'đích', 'đường dẫn' và / hoặc 'giá trị' có thể có ý nghĩa khác với chữ ký phương thức khác trên một hệ điều hành khác.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Target
E:\AIT\out\dependency_symlink.cmd

Lấy mục tệp và xuất thuộc tính LinkType của nó . Một mục có giá trị LinkType của SymbolicLink có nghĩa là nó, tốt, tượng trưng.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty LinkType
SymbolicLink

Lấy mục tệp và xuất thuộc tính Chế độ của nó . Một mục có lgiá trị Chế độ cho biết đó là liên kết tượng trưng.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Mode
-a---l

Lấy mục tệp và xuất thuộc tính Thuộc tính của nó . Một mục được gán với giá trị RepudePoint có thể biểu thị cho một liên kết tượng trưng.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Attributes
Archive, ReparsePoint

1

Không sử dụng fsutilđể kiểm tra xem một mục có phải là một liên kết tượng trưng hay không. Lúc đầu vì errorlevel có lỗi, nên đôi khi, nó ở mức 0 và một thư mục thực được xem là một liên kết tượng trưng. Errorlevel không thể tin cậy.

Một vấn đề với findlà bởi vì find "Symbolic Link"có thể bằng tiếng Anh, nhưng không phải bằng các ngôn ngữ khác.

Cách tốt là tìm kiếm từ các thuộc tính:

for %%i in ("%file_to_test%") do set attribute=%%~ai
set attribute=%attribute:~8,1%
if "%attribute%" == "l" (
    echo It's a symlink!
) else (
    echo Damned! It's real!
)

Các thuộc tính có với% a là "drahscotlep" và "l" là liên kết tượng trưng.


0

Dưới đây là tập lệnh bash cygwin để lưu các liên kết tượng trưng, ​​thêm các thư mục yêu thích của bạn vào dòng đầu tiên

find c:/ C:/Users/$USERNAME/SendTo C:/Users/$USERNAME/Desktop \
      -maxdepth 2 -type l \
      -printf 'mklink\t/D\t"%p"\t"%l"\n' | \
  perl -pne '\
      s!/cygdrive/(\w)/!\1:/!g;\
      s,/a/,/%USERNAME%/,g;\
      1;' | \
  sort -f | uniq  > restore-links.cmd

0

Trong Powershell:

dir | select Name, LinkType

2
Đặc biệt bởi vì đây là một câu hỏi cũ đã có câu trả lời hay, giải thích câu trả lời của bạn thêm vào và mỗi phần của lệnh đang làm là một cách dễ dàng để làm cho nó tốt hơn.
nhạc2myear

0

tất cả các khoản tín dụng cho @SecurityAndPrivacyGuru , [cmd]

hoàn thành tập lệnh / hàm bó đọc symlink {| s trong thư mục} và liệt kê danh sách với chúng và các đường dẫn đích của chúng

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;


set "pafIf=<<pafToSymlink|pafToFolder>>"
set "gIfZsymLink="
for /f "tokens=*" %%q in ('dir "!pafIf!" /al /b') do (
    for /f "tokens=2 delims=[]" %%r in ('dir /al ^| findstr /i /c:"%%q"') do (
        set "gIfZsymLink=!gIfZsymLink!%%~fq>%%r!br!"
    )
)
set "gIfZsymLink=!gIfZsymLink:~0,-1!"
rem echo "!gIfZsymLink!"

for /f "tokens=1,2 delims=>" %%q in ("!gIfZsymLink!") do (
    echo symlink: %%q , filepath: %%r
)


:scIn
rem endlocal
pause
rem exit /b

0

Nếu bạn thực sự muốn sử dụng fsutil, bạn có thể sử dụng cả hai kỹ thuật để ngăn chặn lỗi từ lỗi. (Tôi sử dụng ver> nul để đặt lại errorlevel)

:function_is_symlink_file_folder item_to_test result
rem 0 = Error
rem 1 = Symlink
rem 2 = File
rem 3 = Folder

:function_is_symlink_file_folder
    setlocal enabledelayedexpansion
    set item_to_test=!%~1!
    set /a result=0
    for %%i in ("%item_to_test%") do set attributes=%%~ai
    set attribute_1=%attributes:~0,1%
    set attribute_9=%attributes:~8,1%
    ver >nul
    fsutil reparsepoint query "%item_to_test%" >nul
    if %errorlevel% == 1 (
        if "%attribute_1%" == "d" (
            set /a result=3
        ) else (
            set /a result=2
        )
    ) else (
        if "%attribute_9%" == "l" (
            set /a result=1
        ) else (
            if "%attribute_1%" == "d" (
                set /a result=3
            ) else (
                set /a result=2
            )
        )
    )
    endlocal & set /a %~2=%result%
goto :eof
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.