Windows 7'de sembolik bir bağlantının nereye işaret ettiğini kontrol etme


24

Windows 7'de, bir dosyanın sembolik bir bağlantı olup olmadığını nasıl kontrol edebilirim, bir klasörün bir kavşak olup olmadığını ve nasıl işaret ettiklerini (nasıl bir işaret / kavşak olması durumunda) nasıl kontrol edebilirim. Hem Explorer'da hem de Komut satırında.

Bir klasör ağacının tam bir kopyasını yapmak istediğinizde, sembolik bağların başka bir bilgisayarda nasıl çoğaltılacağını bilmek için komut satırından bunu yapmanın bir yolu olması çok önemlidir.

Bir dosyayı sağ tıklayıp "Özellikler" i işaretlersem, bunun sembolik bir bağlantı olduğuna dair herhangi bir gösterge bulamıyorum.

Yanıtlar:


26

Dir komutu dir /a yapabilirsiniz:

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]

Alternatif olarak, Windows Gezgini'ni kullanabilirsiniz:

Right click column, More, Link Target

Bu, Windows 7'de çalışmaz (Microsoft Windows [Version 6.1.7601])
gonzalezea

1
@gonzalezea evet, öyle. Bunu gönderdiğimde 2012'de Windows 7 ile çalıştı ve şimdi de çalışıyor
Steven Penny

Belki de yeni kullanıcılar için çok açık değil, bu bir komut satırı çözümüdür. Kullanıcı bir komut istemi açmalı, sonra dizini değiştirmeli (CD komutunu kullanarak) sembolik bağ içeren bir dizine değiştirmeli, ardından DIR komutunu yazıp 'enter' tuşuna basmalıdır. DIR komutunu yanlış dizinde çalıştırmak yaygın bir hatadır. Ancak, bir bağlantı dizisinin hangi dizinde bulunduğundan emin değilseniz (Windows GUI'nin belirli bir dizinin herhangi bir işaret veya kavşak içerip içermediğini açıkça belirtmediği için her zaman açık değildir) olmadığından anlaşılabilir. SHORTCUT yerine FILE FOLDER türünde bir kısayol arayın .
Ed999,

2
Bağlantı hedefi 7, Windows 7'de boş
Ronen Festinger

1
Yazmanız gereken komut satırından dir /aEnter tuşuna basın. / A içermezseniz, pencereler birleşim noktalarını listelemez. Dizini dirve dir /adizini arasındaki farkı deneyebilirsin\Users\YourUsername
Paulus

4

StackOverFlow'dan kopyalandı , sadece bu satırı kullandım ve çalışıyor

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

Açıklama :

Gönderen MSDN dosya ayırma tablosu (FAT) ve bu tür, yeniden ayrıştırma noktalarını yönetmek seyrek dosyaları yönetme veya bir hacme sökülmesi olarak NTFS dosya sistemlerine, ilgili gerçekleştirir görevler: Fsutil hakkında. Parametresiz kullanılıyorsa, fsutil, desteklenen alt komutların bir listesini görüntüler.

Bizim kullanımımız için, içinde sembolik olan "Sembolik Bağlantı" olan bir çizgi çıkarmasına dikkat ediyoruz, o zaman sembolikse find, ve eğer findbaşarırsa, bir şeyi çıkarırsak, başlamazsa başka bir şey çıkarırız.

Notlar :

  • Yolun içinde boşluklar varsa, klasör adının çevresindeki tırnak işaretleri gerekir.
  • Aynı çıktının, klasörün bulunmaması ya da işaret bağlantısı olmaması durumunda dikkatli kullanılması gerekir.

2

PowerShell'i kullanarak, en azından Windows işletim sisteminde, sembolik bağları aşağıdakiler gibi herhangi bir dizinde bulabilirsiniz:

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

Daha kısa bir alternatif, Get-ChildItemtakma ismini kullanmak olacaktır ls:

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

Ve aşağıdakilerden herhangi birini yaparak sembolik bir bağlantıyla ilgili bilgi alabilirsiniz:

Dosya öğesini alın ve Hedef özelliğini çıktılayın . Hedef, sembolik bağın "değeri" dir. Ek olarak, işletim sistemleri arasında yan yana dizilirken sembolik bağlantılar oluşturmak için yöntem veya komut imzaları, argüman adları: 'target', 'path' ve / veya 'value', farklı bir işletim sistemindeki başka bir yöntem imzasından farklı anlamlar taşıyabilir.

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

Dosya öğesini alın ve LinkType özelliğini çıkarın . LinkType değeri SymbolicLink olan bir öğe, sembolik olduğu anlamına gelir.

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

Dosya öğesini alın ve Mode özelliğini çıkarın . lMod değerinde olan bir öğe , bunun sembolik bir bağlantı olduğunu gösterir.

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

Dosya öğesini alın ve Attributes özelliğini çıkarın . ReparsePoint değeriyle ilişkilendirilen bir öğe belki de sembolik bir bağlantıyı gösterir.

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

1

fsutilBir öğenin sembolik bir bağlantı olup olmadığını kontrol etmek için kullanmayın . Öncelikle errorlevel'de hatalar olduğu için bazen 0'a kadar kalır ve gerçek bir klasör sembolik bir link olarak görülür. Hata seviyesi güvenilir olamaz.

Bir sorun find, çünkü find "Symbolic Link"ingilizce olarak mümkün, fakat diğer dillerde değil.

En iyi yol, özelliklerden arama yapmaktır:

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

% A ile verilen öznitelikler "drahscotlep" ve "l" sembolik bağlantı içindir.


0

İşte, sembolik bağlantıları kaydetmek için bir cygwin bash betiği, en sevdiğiniz klasörleri ilk satıra ekleyin

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

Powershell'de:

dir | select Name, LinkType

2
Özellikle bu, zaten iyi cevapları olan eski bir soru olduğundan, cevabınızın ne eklediğini ve komutun her bir bölümünün ne yaptığını açıklamak, onu daha iyi hale getirmenin kolay bir yoludur.
music2myear

0

@SecurityAndPrivacyGuru , [cmd] ' e verilen tüm krediler

{| s klasöründe} işaretini okuyan toplu komut dosyası / işlevini tamamlar ve bunlarla ve hedef yollarıyla liste çıkarır

@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

Gerçekten fsutil kullanmak istiyorsanız, errolevel hatalarını önlemek için her iki tekniği de kullanabilirsiniz. (Hata seviyesini sıfırlamak için ver> nul kullanıyorum)

: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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.