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>"
l
Flag atrybutem jest tutaj kluczem; l
jest dla Reparse Points
(skrzyżowań, dowiązań symbolicznych i katalogów dowiązań symbolicznych)
Twarde linki
Niestety dir
wyś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 fsutil
listę 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
forfiles
z opcji podkatalogów rekurencyjnych ( /s
) wbiło mój procesor i zajęło mu trochę czasu.
- W
fsutil
zasadzie 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 for
do identyfikacji twardych łączy. Ponieważ forfiles
nie 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 fsutil
wspomniano powyżej
Użyj programu ListLinks firmy Uwe Sieber - patrz link do użycia
Użyj NTFSLinksView Nirsoft, jeśli wolisz aplikację GUI