Memeriksa di mana titik simbolis menunjuk pada Windows 7

24

Di Windows 7, bagaimana saya bisa mengecek apakah suatu file merupakan tautan simbolik atau tidak, apakah suatu folder merupakan persimpangan atau tidak, dan bagaimana saya dapat memeriksa di mana mereka menunjuk (jika ada symlink / persimpangan). Baik di Explorer maupun di baris Perintah.

Sangat penting untuk memiliki cara untuk melakukannya dari baris perintah, untuk mengetahui cara menduplikasi tautan simbolik di komputer lain ketika Anda ingin membuat replika pohon folder yang tepat.

Jika saya klik kanan pada file dan centang "Properti", saya tidak dapat menemukan indikasi bahwa itu adalah tautan simbolik.

BearCode
sumber

Jawaban:

26

The perintah dir dir /a dapat melakukan ini:

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]

Atau, Anda dapat menggunakan Windows Explorer:

Right click column, More, Link Target
Steven Penny
sumber
Ini tidak berfungsi di windows 7 (Microsoft Windows [Versi 6.1.7601])
gonzalezea
1
@ Gonzalezea ya, itu benar. Ini bekerja dengan Windows 7 pada tahun 2012 ketika saya memposting ini, dan sekarang berfungsi juga
Steven Penny
Mungkin tidak begitu jelas bagi pengguna baru, ini adalah solusi baris perintah. Pengguna harus membuka prompt perintah, kemudian mengubah direktori (menggunakan perintah CD) ke direktori yang berisi tautan simbolis, kemudian ketik perintah DIR dan tekan tombol 'enter'. Menjalankan perintah DIR di direktori yang salah adalah kesalahan umum. Tetapi dapat dimengerti, kecuali jika Anda yakin direktori tempat symlink berada (tidak selalu jelas, karena Windows GUI tidak secara eksplisit memberi tahu Anda apakah direktori tertentu berisi symlink atau persimpangan). Cari pintasan yang memiliki jenis FILE FOLDER, bukan SHORTCUT .
Ed999
2
Bidang target tautan kosong di windows 7
Ronen Festinger
1
dari baris perintah Anda harus mengetik dir /alalu tekan Enter. Jika Anda tidak menyertakan / a, windows tidak mencantumkan titik persimpangan. Anda dapat mencoba perbedaan antara dirdan dir /adi direktori\Users\YourUsername
Paulus
4

Disalin dari StackOverFlow , saya hanya menggunakan baris ini, dan berfungsi

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

Penjelasan :

Dari MSDN tentang FSUtil: Melakukan tugas yang terkait dengan tabel alokasi file (FAT) dan sistem file NTFS, seperti mengelola titik reparse, mengelola file jarang, atau menurunkan volume. Jika digunakan tanpa parameter, fsutil menampilkan daftar sub-perintah yang didukung.

Untuk penggunaan kita, kita hanya peduli bahwa itu menghasilkan garis yang memiliki "Link Simbolik" di dalamnya, jika itu simbolis, yang kita lalu find, dan jika findberhasil, kita output satu hal, jika tidak, kita output sesuatu yang lain.

Catatan :

  • Kutipan di sekitar nama folder diperlukan jika path memiliki spasi di dalamnya.
  • Ini memberikan output yang sama apakah folder tidak ada, atau bukan symlink, gunakan dengan hati-hati.
Daniel K.
sumber
2

Dengan menggunakan PowerShell, setidaknya pada OS Windows, Anda dapat menemukan tautan simbolik di direktori mana pun, seperti berikut ini:

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

Alternatif yang lebih ringkas adalah menggunakan Get-ChildItemalias ls:

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

Dan Anda dapat memperoleh informasi yang relevan pada tautan simbolis dengan melakukan salah satu dari yang berikut:

Dapatkan item file dan hasilkan properti Target -nya . Target menjadi "nilai" dari tautan simbolik. Selain itu, metode atau tanda tangan perintah untuk membuat symlink ketika menyandingkan antara sistem operasi, nama argumen dari: 'target', 'path' dan / atau 'value' dapat memiliki arti yang berbeda dari metode tanda tangan lain pada OS yang berbeda.

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

Dapatkan item file dan hasilkan properti LinkType -nya . Item dengan nilai LinkType dari SymbolicLink berarti simbolnya.

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

Dapatkan item file dan output properti Mode -nya . Item dengan lnilai Mode menunjukkan bahwa itu adalah tautan simbolik.

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

Dapatkan item file dan hasilkan properti Attributes -nya . Item yang dikaitkan dengan nilai ReparsePoint mungkin menunjukkan tautan simbolis.

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

Jangan gunakan fsutiluntuk memeriksa apakah suatu item merupakan tautan simbolik atau bukan. Pada awalnya karena tingkat kesalahan memiliki kesalahan, jadi kadang-kadang, itu tetap ke 0 dan folder nyata dipandang sebagai tautan simbolis. Tingkat kesalahan tidak bisa dipercaya.

Masalahnya findadalah karena find "Symbolic Link"dimungkinkan dalam bahasa Inggris, tetapi tidak dalam bahasa lain.

Cara yang baik adalah mencari dari atribut:

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!
)

Atribut yang didapat dengan% a adalah "drahscotlep" dan "l" untuk tautan simbolik.

Celes
sumber
0

Berikut ini adalah skrip cygwin bash untuk menyimpan symlink, tambahkan folder favorit Anda ke baris pertama

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
mosh
sumber
0

Dalam Powershell:

dir | select Name, LinkType
John
sumber
2
Terutama karena ini adalah pertanyaan lama yang sudah memiliki jawaban yang baik, menjelaskan apa yang ditambahkan jawaban Anda dan apa yang dilakukan setiap bagian dari perintah adalah cara mudah untuk membuatnya lebih baik.
music2myear
0

semua kredit ke @SecurityAndPrivacyGuru , [cmd]

skrip batch lengkap / fungsi yang membaca symlink {| s di folder} dan daftar keluaran dengan mereka dan jalur target mereka

@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
Ilias
sumber
0

Jika Anda benar-benar ingin menggunakan fsutil, Anda dapat menggunakan kedua teknik untuk mencegah kegagalan dari errolvel. (Saya menggunakan ver> nul untuk mengatur ulang tingkat kesalahan)

: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
Celes
sumber