Nie musisz koniecznie pobierać dodatkowych programów, aby wyświetlić listę skrzyżowań, dowiązań symbolicznych i dowiązań twardych, ale jeśli masz określone wymagania dotyczące formatu wyjściowego, mogą one pomóc.
Lista wszystkich skrzyżowań, dowiązań symbolicznych i katalogów dowiązań symbolicznych w bieżącym katalogu i jego podkatalogach:
dir /al /s
Lub jeśli chcesz, aby były wymienione osobno ...
Wyświetl wszystkie skrzyżowania w bieżącym katalogu i jego podkatalogach:
dir /al /s | findstr "<JUNCTION>"
Wyświetl wszystkie dowiązania symboliczne w bieżącym katalogu i jego podkatalogach:
dir /al /s | findstr "<SYMLINK>"
Wyświetl wszystkie katalogi dowiązań symbolicznych w bieżącym katalogu i jego podkatalogach:
dir /al /s | findstr "<SYMLINKD>"
lFlag atrybutem jest tutaj kluczem; ljest dla Reparse Points(skrzyżowań, dowiązań symbolicznych i katalogów dowiązań symbolicznych)
Twarde linki
Niestety dirwyświetla twarde linki jako zwykłe pliki, więc nie można go używać do identyfikowania twardych łączy. Zamiast tego możesz użyć wbudowanego fsutil. Należy go uruchomić z wiersza polecenia z podwyższonym poziomem uprawnień.
Za pomocą wyświetl fsutillistę wszystkich dowiązań twardych w bieżącym katalogu i jego podkatalogach:
for /F "usebackq tokens=2* delims=:" %G in (`forfiles /s /c "cmd /c fsutil hardlink list @path | findstr /n .* | findstr /b /v 1"`) do @fsutil hardlink list "%G" & echo.
Ten jednowarstwowy nie jest idealny i chętnie przyjmę wszelkie ulepszenia.
- Korzystanie
forfilesz opcji podkatalogów rekurencyjnych ( /s) wbiło mój procesor i zajęło mu trochę czasu.
- W
fsutilzasadzie kończy się działa dwa razy; po raz pierwszy zidentyfikuj twarde linki, licząc liczbę linii wyjściowych zwracanych przez każde wywołanie, a po raz drugi na właśnie znalezionych twardych linkach, aby uzyskać prawidłowe wyjście.
- Będą duplikaty linii. Aby je wyeliminować, należy przekierować dane wyjściowe do pliku, a następnie uruchomić plik za pomocą narzędzia takiego jak
uniq.
Oto plik wsadowy, który służy tylko fordo identyfikacji twardych łączy. Ponieważ forfilesnie jest zaangażowany, może być nieco szybszy, jednak nadal cierpi z powodu pozostałych zastrzeżeń powyższej jednowarstwowej.
@echo off
AT > NUL
if %ERRORLEVEL% NEQ 0 echo You need to run this script from an elevated command prompt. Exiting. && exit /B 1
for /R "%CD%" %%a IN (*.*) do (
for /F "usebackq tokens=2* delims=:" %%b in (`fsutil hardlink list "%%a" ^| findstr /n .* ^| findstr /b /v 1`) do (
fsutil hardlink list "%%b"
REM The following echo command breaks up each group of hard links with a blank line
echo.
)
)
Istnieje kilka innych (nieprzetestowanych) opcji:
Użyj (starego) narzędzia Microsoft HL Scan
hlscan /dir %CD%
Użyj alternatywnego polecenia znajdującego się w zestawie narzędzi Microsoft SFUA:
find . -links +1
Użyj narzędzia findlinks Sysinternals w podobny sposób, jak fsutilwspomniano powyżej
Użyj programu ListLinks firmy Uwe Sieber - patrz link do użycia
Użyj NTFSLinksView Nirsoft, jeśli wolisz aplikację GUI