Не обов’язково завантажувати додаткові програми, щоб перелічити переходи, символьні посилання та жорсткі посилання, але якщо у вас є конкретні вимоги до вихідного формату, вони можуть допомогти.
Перерахуйте всі каталоги переходів, символьних посилань та символьних посилань у поточному каталозі та його підкаталогах:
dir /al /s
Або якщо ви хочете, щоб їх було вказано окремо ...
Перерахуйте всі з'єднання в поточному каталозі та його підкаталогах:
dir /al /s | findstr "<JUNCTION>"
Перерахуйте всі посилання в поточному каталозі та його підкаталогах:
dir /al /s | findstr "<SYMLINK>"
Перерахуйте всі каталоги символьних посилань у поточному каталозі та його підкаталогах:
dir /al /s | findstr "<SYMLINKD>"
Тут lє ключовим прапором атрибута; lпризначений для Reparse Points(каталоги переходів, символьних посилань та символьних посилань)
Жорсткі посилання
На жаль, dirсписок жорстких посилань є звичайними файлами, тому ви не можете використовувати їх для ідентифікації жорстких посилань. Ви використовуєте вбудований fsutilнатомість. Його потрібно запустити з підвищеного командного рядка.
З fsutil, перерахуйте всі жорсткі посилання в поточному каталозі та його підкаталогах:
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.
Цей одноколісний шар не є ідеальним, і я вітаю будь-які вдосконалення.
- Використання
forfilesпараметрів підкаталогій повторного запису ( /s) забило мій процесор, і на його завершення пішло час.
- В
fsutilосновному закінчується бігом двічі; перший раз ідентифікувати жорсткі посилання шляхом підрахунку кількості вихідних рядків, що повертаються під час кожного виклику, і другий раз на щойно знайдених жорстких посиланнях, щоб отримати правильний вихід.
- Будуть дублікати рядків. Щоб їх усунути, ви хочете перенаправити вихід у файл, а потім запустити файл через такий інструмент, як
uniq.
Ось пакетний файл, який використовується лише forдля виявлення жорстких посилань. Оскільки forfilesце не задіяно, воно може бути трохи швидшим, однак воно все ще страждає від інших застережень вищевказаного одноводкового.
@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.
)
)
Є кілька інших (неперевірених) варіантів:
Використовуйте (стару) утиліту Microsoft HL Scan
hlscan /dir %CD%
Скористайтеся командою альтернативного пошуку, яка постачається з інструментальним інструментом Microsoft SFUA:
find . -links +1
Використовуйте утиліту пошуку посилань Sysinternals аналогічним чином, як fsutilзазначено вище
Використовуйте програму ListLinks Uwe Sieber - див. Посилання для використання
Використовуйте NTFSLinksView Nirsoft, якщо ви віддаєте перевагу додатку GUI